Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NLog将GUID写入数据库_C#_Sql_Guid_Nlog - Fatal编程技术网

C# NLog将GUID写入数据库

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,

每次在数据库中写入日志时,我都无法插入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,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