将null传递给SQL命令

时间:2015-09-04 19:29:44

标签: c# sql

我有一个班级:

public class Intlist
{
    public int yesFlag{ get; set; }
    public int? noFlag { get; set; }
}

我需要更新数据库表,但有时可以为null的int值为null。我正在使用

CommandText = @"UPDATE thetable 
                SET Yes = " + list.yesFlag +
                   ",NoFlag = " + (list.previous == null) ? DBNull.Value : list.previous +
                   ",NextValue = 10" 

我试图得到它,如果noFlag为null,它在数据库中输入null,但我收到错误:

  

无法将类型'string'隐式转换为'bool'

  

由于存在,因此无法确定条件表达式的类型   'System.DBNull'和'string'

之间没有隐式转换

2 个答案:

答案 0 :(得分:4)

Sayka 是目标。 使用参数

您不仅可以保护数据库免受SQL注入攻击,还可以利用.Nets内置功能来处理这些类型的问题。

    CommandText = @"UPDATE thetable SET Yes = @yesFlag, NoFlag = @noflag, NextValue = 10";
    Command.Parameters.AddWithValue("@yesFlag", list.yesFlag);
    Command.Parameters.AddWithValue("@noFlag", list.previous);

答案 1 :(得分:1)

强烈建议使用参数。但在你的情况下,你只需输入'Null'。它会起作用。

CommandText = @"UPDATE thetable SET Yes = " + 
             list.yesFlag.ToString() + ",NoFlag = " + (list.previous == null 
             ? "NULL" : list.previous) + ",NextValue = 10";

此查询将保持原样。