C#boolean需要转换为SQL Server的位,因此它需要为1而不是True

时间:2015-09-17 06:58:37

标签: c# sql-server type-conversion sqldatatypes

我有一个C#属性,其数据类型为bool,当它设置后,它变为TrueFalse

但是我需要它与bit类型的SQL Server表列匹配,以便将其保存为1或0。

SQL Server专栏:

StormOut bit

C#属性

public bool StormOut { get; set; }

C#SQL语句:

string querystring = "UPDATE tblSignOnOff SET StormOut = " + storm.StormOut + " WHERE id = 1902";

否则当前C#中的SQL语句是

UPDATE tblSignOnOff 
SET StormOut = True 
WHERE id = 1902

导致错误:

  

无效的列名称'True'。

3 个答案:

答案 0 :(得分:3)

你错过了单引号。改变如下:

string querystring = "UPDATE tblSignOnOff SET StormOut = '" + storm.StormOut + "' WHERE id = 1902";

但重要提示:您应该始终使用parameterized queries,如下所示。这种字符串连接对SQL Injection开放:

string querystring = "UPDATE tblSignOnOff SET StormOut = @StormOut WHERE id = @id";
yourCommand.Parameters.AddWithValue("@id", 1902);
yourCommand.Parameters.AddWithValue("@StormOut", storm.StormOut);

答案 1 :(得分:2)

您应该使用参数并避免字符串连接

string Command = "UPDATE tblSignOnOff SET StormOut @StormOut WHERE id = @id";
using (SqlConnection mConnection = new SqlConnection(ConnectionString))
{
    mConnection.Open();

    using (SqlCommand myCmd = new SqlCommand(Command, mConnection))
    {
        myCmd.Parameters.AddWithValue("@id", 1902); // TODO set this value dynamically
        myCmd.Parameters.AddWithValue("@StormOut", storm.StormOut);

        int RowsAffected = myCmd.ExecuteNonQuery();
    }
}

答案 2 :(得分:-1)

进一步修改@ S.Akbari的回答,提出他对参数化查询的建议;

SqlCommand command = new SqlCommand();
command.CommandText = "UPDATE tblSignOnOff SET StormOut = @StormOut WHERE id = @id";    
command.Parameters.AddWithValue("@StormOut", storm.StormOut);
command.Parameters.AddWithValue("@id", 1902);