C# - 将 null 插入 SQL Compact Edition 表

Posted

技术标签:

【中文标题】C# - 将 null 插入 SQL Compact Edition 表【英文标题】:C# - Insert null into SQL Compact Edition table 【发布时间】:2011-03-30 08:53:13 【问题描述】:

我正在尝试使用参数将一些数据插入到 SQL Compact Edition 表中。我的表允许插入 null,但是当我在下面运行我的代码时,我无法让它工作,因为这些参数之一有时会为 null,我想在参数为 null 时将 null 插入该列。

我该如何解决这个问题?

string strConn = Properties.Settings.Default.SqlConnectionString;


        using (SqlCeConnection conn = new SqlCeConnection(strConn))
        
            conn.Open();
            using (SqlCeCommand cmd = new SqlCeCommand("insert into table(ID, Name, Adress) values (@parm1, @parm2, @param3)", conn))
            
                cmd.Parameters.AddWithValue("@parm1", ID);
                cmd.Parameters.AddWithValue("@parm2", Name);
                cmd.Parameters.AddWithValue("@parm3", Adress);

                cmd.ExecuteNonQuery();
            
        

【问题讨论】:

您遇到什么错误?或者它根本不起作用? 当value参数值为null时表示该参数未设置。 在我看来它应该可以工作。想要就是问题。 当所有参数都有值时没有问题,但其中一个为空我收到错误说参数尚未设置。 SQL 查询字符串中的一个参数名为@param3。您通过@parm3 设置@parm1。也许这就是问题所在? 【参考方案1】:

我认为你可以将DBNull.Value 作为你的值传递给它:

cmd.Parameters.AddWithValue("@parm2", (Name as object) ?? DBNull.Value);

【讨论】:

但是您需要将 Name 或 DBNull.Value 转换为对象(c# 编译器不会为您执行此操作) 当我尝试这个时,我得到 Operator '??'不能应用于“字符串”和“System.DBNull”类型的操作数 我认为 DBNull 是一个类,因此可以作为对象传递......但你可能是对的,我不能使用?在不同类型的两侧。 x ?? y 实际上是 x ? x : y 的简写。 x 和 y 必须是相同的类型,否则编译器会报错。我会尝试将名称转换为要查看的对象。 @Stephen - 可能只是一个错字,但它是x!=null ? x : y。这是对 null 的检查,而不是布尔检查。【参考方案2】:

检查您的参数是否 == null,如果是,则插入 DBNull 代替它或省略参数。

.NET 空值和 SQL 空值是不同的。

【讨论】:

【参考方案3】:

也许这个问题的根源在于 SQL 查询字符串本身。 你声明了三个参数:

@parm1@parm2 和 - 专注于拼写 - @param3

然后你设置: @parm1@parm1 和 - 专注于拼写 - @parm3

我的猜测是整个 @parm3@param3 参数命名可能会导致此问题。

【讨论】:

【参考方案4】:

我使用以下扩展方法来设置可为空的参数。

public static class SqlExtensions
    
        public static void AddNullableParameterWithValue(this SqlCeCommand cmd, string name, object value)
        
            if (null != value)
                cmd.Parameters.AddWithValue(name, value);
            else
                cmd.Parameters.AddWithValue(name, DBNull.Value);
        
    

【讨论】:

以上是关于C# - 将 null 插入 SQL Compact Edition 表的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 将 JSON 文本插入 SQL

使用存储过程(SQL + C#)将数据插入一个表,然后将多行插入另一个表

C#在Sqlserver数据库中设置字段,在插入操作时不插入数据,有问题吗?

使用 C# 和 OPENJSON 将 JSON 插入 SQL Server 2016

将数据行从 C# 中的另一个 sql 表插入到 sql 表中

C# 无法将数据插入 SQL Server 数据库