无法在SQL中存储NULL值

时间:2015-01-29 22:56:06

标签: c# sql asp.net sql-server

我正在尝试将值存储在数据库中。 如果它是一个int。

,如何在数据库中赋值NULL

查询:

@id varchar(10)
UPDATE [Table] SET 
      [id] = @id     -- id is an int in sql

C#代码:

我传递了值:

    //dATABASE CONNECTION
 db.StoredProcedure = "UpdateProjectValues";
 db.Paramater("ID",TB_ID.TEXT); //tb_id.text="" 

如果它有值,则存储该int,但如果我没有该值,则存储0,但我希望存储NULL。

2 个答案:

答案 0 :(得分:2)

严格在数据库内的一个解决方案是:

UPDATE [Table]
     SET [id] = (case when @id <> '' then cast(@id as int) end);

这使转换显式化。但是,最好设置C#代码以传递一个可以取NULL值的整数值。

答案 1 :(得分:0)

我认为我提供了一些选择:

1)。处理存储过程中的值。 Gordon的CASE语句有效,但既然您使用的是SQL Server,那么您还可以使用NULLIF()函数,如下所示:

UPDATE TABLE 
SET [id] = NULLIF(@ID, '');

2。)使用三元运算符在C#代码中处理:

SqlCommand cmd = new SqlCommand();
cmd.CommandText = "UpdateProjectValues";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("@ID", string.IsNullOrWhiteSpace(TB_ID.TEXT) ? DBNull.Value : (object)TB_ID.TEXT);

还有其他方法,但这些都是简单的例子。