尝试使用参数将一些数据插入到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();
}
}
答案 0 :(得分:8)
我认为您可以将DBNull.Value
作为空值传递给您:
cmd.Parameters.AddWithValue("@parm2", (Name as object) ?? DBNull.Value);
答案 1 :(得分:4)
检查你的参数是否== null,如果是,则插入DBNull代替它或省略参数。
.NET nulls和SQL nulls不同。
答案 2 :(得分:1)
也许这个问题的根源位于SQL查询字符串本身。 您声明了三个参数:
@parm1
,@parm2
和 - 专注于拼写 - @param3
你设定:
@parm1
,@parm1
和 - 专注于拼写 - @parm3
我的猜测是整个@parm3
与@param3
参数命名可能导致此问题。
答案 3 :(得分:0)
我使用以下扩展方法来设置可为空的参数。
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);
}
}