C# NLog将GUID写入数据库
每次在数据库中写入日志时,我都无法插入guid Id。它抛出以下错误:C# NLog将GUID写入数据库,c#,sql,guid,nlog,C#,Sql,Guid,Nlog,每次在数据库中写入日志时,我都无法插入guid Id。它抛出以下错误: Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll Exception thrown: 'System.Data.SqlClient.SqlException' in NLog.dll 到目前为止,我所拥有的: @"INSERT INTO [dbo].[Nlogs] (Id,
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in NLog.dll
到目前为止,我所拥有的:
@"INSERT INTO [dbo].[Nlogs]
(Id,Message)
values
(@Id,@Message)";
databaseTarget.Parameters.Add(new DatabaseParameterInfo("@Id", Guid.NewGuid().ToString()));
databaseTarget.Parameters.Add(new DatabaseParameterInfo("@Message", "${message}"));
谢谢
如何让它为每个条目创建新的Guid
使用或
例如:
更新:在上面的示例中添加了
dbType
属性,这将解决任何转换问题!为此,您需要NLog 4.6+
从:
dbType—dbType的一个值(例如“Int32”、“Decimal”、“DateTime”)或带有属性名称前缀的dbType类值(例如“SqlDbType.NChar”)将在“NChar”上设置属性“SqlDbType”。另一个例子是带有NpgsqlDbType参数的“NpgsqlDbType.Json”。在NLog 4.6中引入
如何让它为每个条目创建新的Guid
使用或
例如:
更新:在上面的示例中添加了
dbType
属性,这将解决任何转换问题!为此,您需要NLog 4.6+
从:
dbType—dbType的一个值(例如“Int32”、“Decimal”、“DateTime”)或带有属性名称前缀的dbType类值(例如“SqlDbType.NChar”)将在“NChar”上设置属性“SqlDbType”。另一个例子是带有NpgsqlDbType参数的“NpgsqlDbType.Json”。在NLog 4.6中引入
结果是:
@"INSERT INTO [dbo].[Nlogs]
(Id,Message)
values
(NewID(),@Message)";
databaseTarget.Parameters.Add(new DatabaseParameterInfo("@Message", "${message}"));
结果是:
@"INSERT INTO [dbo].[Nlogs]
(Id,Message)
values
(NewID(),@Message)";
databaseTarget.Parameters.Add(new DatabaseParameterInfo("@Message", "${message}"));
请添加堆栈跟踪@Fruchtzwerg就是这样。只要创建日志,它就会重复这两行。我认为这是因为“Id”是主键,它会出错,因为它不能两次使用相同的guid。如何让它为每个条目创建新的Guid?我删除了作为主键的Id,每次运行都具有相同的guid,因此记录良好。请添加堆栈跟踪@Fruchtzwerg就是这样。只要创建日志,它就会重复这两行。我认为这是因为“Id”是主键,它会出错,因为它不能两次使用相同的guid。如何让它为每个条目创建新的Guid?我删除了Id作为主键,并且每次运行都使用相同的guid时,它可以正常运行。我尝试了${guid},但仍然得到相同的异常可能是因为我使用的是.net core吗?我不是NLog专家,但当我使用${guid}时,我出现了相同的错误。因此,我将数据库中的类型从uniqueidentifier更改为varchar,并看到它生成了一个没有破折号的字符串。我改成了${guid:format=D},效果很好。更新:在上面的示例中添加了
dbType
属性,这将解决任何转换问题!为此,您需要NLog 4.6+。然后format=D
也不需要我尝试了${guid},但我仍然得到相同的例外可能是因为我使用的是.net core?我不是NLog专家,但当我使用${guid}时,我也有相同的错误。因此,我将数据库中的类型从uniqueidentifier更改为varchar,并看到它生成了一个没有破折号的字符串。我改成了${guid:format=D},效果很好。更新:在上面的示例中添加了dbType
属性,这将解决任何转换问题!为此,您需要NLog 4.6+。然后也不需要format=D