如何使用C#将空值插入表中的GUID列?

时间:2014-05-09 03:35:05

标签: c# sql sql-server stored-procedures

我搜索了整个网络。我想知道为什么这个简单的任务在C#中很难完成。

sqlcmd.Parameters.Add("@someid", System.Data.SqlDbType.UniqueIdentifier).Value =
string.IsNullOrEmpty(class.someid) ? System.Data.SqlTypes.SqlGuid.Null : new Guid(class.someid);

这会返回错误:

  

无法将参数值从字符串转换为guid

我的存储过程使用C#中继的参数更新表中的记录。

我想要做的是使用存储过程更新记录及其具有空值的特定列,该存储过程从带有guid的C#传递guid参数,有时值为null。这在C#中是否可行?

2 个答案:

答案 0 :(得分:1)

你可以尝试一下:

sqlcmd.Parameters.Add("@someid", System.Data.SqlDbType.UniqueIdentifier).Value =
string.IsNullOrEmpty(class.someid) ? System.Guid.Empty : new Guid(class.someid);

如果铸造不起作用。并在您的表中确保此列是否允许null。 class.someid具有构造函数的正确格式。 您可以查看此link以获得概述。

答案 1 :(得分:1)

如果我没有错,您的列ID在数据库中的类型为Guid,但您的参数是字符串。

您可以将参数转换为SqlGuid

command.Parameters.Add("@GuidParameter", SqlDbType.UniqueIdentifier).Value = new System.Data.SqlTypes.SqlGuid(YourGuid); //The value of @ID

链接:http://msdn.microsoft.com/fr-fr/library/system.data.sqltypes.sqlguid.aspx

还要在存储过程中尝试以下操作:

Declare @someid uniqueidentifier = null

声明可以为空的属性:

public Guid? column1;

分配Null:

column1 = null;