对于SQL Server,C#boolean需要转换为bit,因此它需要为1而不是True

对于SQL Server,C#boolean需要转换为bit,因此它需要为1而不是True,c#,sql-server,type-conversion,sqldatatypes,C#,Sql Server,Type Conversion,Sqldatatypes,我有一个数据类型为bool的C#属性,当它被设置时,它会变成True或False 但是,我需要它与类型为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 =

我有一个数据类型为
bool
的C#属性,当它被设置时,它会变成
True
False

但是,我需要它与类型为
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语句是

这会导致错误:

无效的列名“True”


你错过了单引号。像这样改变:

string querystring = "UPDATE tblSignOnOff SET StormOut = '" + storm.StormOut + "' WHERE id = 1902";
但有一个重要的注意事项:您应该始终像下面这样使用。这种类型的字符串连接适用于:


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

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();
    }
}

进一步修改@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);

好的,很酷,我想我要做的是将布尔值转换为“Convert.ToInt16”。这将使真/假、0或1“Yes to:”使用参数化查询“!永远不要通过简单地连接字符串/值来构建sql语句。您可以尝试使用
参数。AddWithValue
进行参数化查询,这可能有助于您了解Add与AddWithValue的区别?我个人会避免
AddWithValue
,直接指定类型并使用
Value
属性,但这至少比原始代码好…@JonSkeet我不懂你的意思。使用价值属性?例如?@Byyo:它避免使用你不想要的推论。例如,这是一个粗鲁的抄袭&paste@Byyo如果你真的认为我复制粘贴了你的答案,告诉我,我会删除我的。。
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();
    }
}
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);