C#-在SQL Compact Edition表中插入null
我正在尝试使用参数将一些数据插入到SQL Compact Edition表中。我的表允许插入null,但当我运行下面的代码时,我无法使其工作,因为这些参数之一有时会为null,并且我希望在参数为null时将null插入该列 我怎样才能解决这个问题C#-在SQL Compact Edition表中插入null,c#,sql,sql-server-ce,C#,Sql,Sql Server Ce,我正在尝试使用参数将一些数据插入到SQL Compact Edition表中。我的表允许插入null,但当我运行下面的代码时,我无法使其工作,因为这些参数之一有时会为null,并且我希望在参数为null时将null插入该列 我怎样才能解决这个问题 string strConn = Properties.Settings.Default.SqlConnectionString; using (SqlCeConnection conn = new SqlCeConnection(
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();
}
}
我认为可以将
DBNull.Value
作为空值传递:
cmd.Parameters.AddWithValue("@parm2", (Name as object) ?? DBNull.Value);
检查您的参数==null,如果是,请插入DBNull代替它,或者忽略该参数
.NET nulls和SQL nulls是不同的。此问题的根源可能位于SQL查询字符串本身。 您可以声明三个参数:
@parm1
,@parm2
和-关注拼写-@param3
你设置:
@parm1
,@parm1
和-关注拼写-@parm3
我的猜测是整个
@parm3
与@param3
参数命名都可能导致这种情况。我使用以下扩展方法设置可为空的参数
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);
}
}
你犯了什么错误?或者它根本不起作用?当value参数值为null时,它表示该参数尚未设置。在我看来,它应该起作用。Want是问题所在。当所有参数都有值,但其中一个值为null时,没有问题。我得到一个错误,表示尚未设置参数。SQL查询字符串中的一个参数名为@param3。您可以设置@parm1到@parm3。也许这就是问题所在?但您需要将Name或DBNull.Value强制转换为object(c#编译器不为您执行此操作),当我尝试此操作时,我得到运算符“??”不能应用于“string”和“System.DBNull”类型的操作数,我认为DBNull是一个类,因此可以作为对象传递。。。但你可能是对的,我不能用??在不同类型的两侧。
x??y实际上是x的缩写?x:y
。x和y必须是相同的类型,否则编译器会抱怨。我将尝试将名称转换为要查看的对象。@Stephen-可能只是输入错误,但它是x=无效的x:y
。这是对空值的检查,不是布尔检查。