C#-在SQL Compact Edition表中插入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(

我正在尝试使用参数将一些数据插入到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();
            }
        }

我认为可以将
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
。这是对空值的检查,不是布尔检查。