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 表的主要内容,如果未能解决你的问题,请参考以下文章
使用存储过程(SQL + C#)将数据插入一个表,然后将多行插入另一个表
C#在Sqlserver数据库中设置字段,在插入操作时不插入数据,有问题吗?
使用 C# 和 OPENJSON 将 JSON 插入 SQL Server 2016