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

Posted

技术标签:

【中文标题】C# boolean 需要转换为 SQL Server 的位,因此它需要为 1 而不是 True【英文标题】:C# boolean needs converted to bit for SQL Server so instead of True it needs to be 1 【发布时间】:2015-12-13 23:09:14 【问题描述】:

我有一个数据类型为bool 的C# 属性,当它被设置时,它变成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”无效。

【问题讨论】:

您可以尝试Parameters.AddWithValue 进行参数化查询,这可能对您有所帮助 【参考方案1】:

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

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

【讨论】:

好吧,我想我将不得不做“Convert.ToInt16 你的布尔值。这将使真/假,0 或 1” 是的:“使用参数化查询”!永远不要通过简单地连接字符串/值来构建 sql 语句。【参考方案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();
    

【讨论】:

Add 和 AddWithValue 有什么区别? 我个人会避免AddWithValue,直接指定类型并使用Value属性,但这至少比原始代码更好...... ***.com/questions/21110001/… @JonSkeet 我不关注你。使用价值属性?例子? @Byyo:它避免使用你不想要的推论。例如,请参阅blogs.msmvps.com/jcoehoorn/blog/2014/05/12/…。【参考方案3】:

根据@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);

【讨论】:

那是粗鲁的复制和粘贴 @Byyo 如果你真的认为我复制粘贴你的答案,告诉我,我会删除我的..

以上是关于C# boolean 需要转换为 SQL Server 的位,因此它需要为 1 而不是 True的主要内容,如果未能解决你的问题,请参考以下文章

将 C# 代码转换为 PL/SQL 代码

在 C# 中将十六进制值从 SQL Server 转换为日期时间

在 C# 中将 DataTable 转换为 SQL 的 CREATE TABLE + INSERT 脚本

试图从 c# 字符串转换为 SQL 二进制文件

将 SQL Server 数据库转换为本地 C# 数据库

使用 C#(或任何其他方法)将 XML 转换为 SQL Server 表