我有一个数据类型为
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 语句是
UPDATE tblSignOnOff
SET StormOut = True
WHERE id = 1902
这会导致错误:
列名“True”无效。
您错过了单引号。像这样改变:
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);
您应该使用参数并避免字符串连接
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();
}
}
int bitValue = booleanVar == true? 1: 0;
进一步修改@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);