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

问题描述 投票:0回答:4

我有一个数据类型为

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”无效。

c# sql-server type-conversion sqldatatypes
4个回答
5
投票

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

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
投票

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

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

0
投票
int bitValue = booleanVar == true? 1: 0;

-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);
© www.soinside.com 2019 - 2024. All rights reserved.