2011-03-30 40 views
4

Iam尝试使用参数将一些数据插入到SQL Compact Edition表中。我的表格允许插入null,但是当我在下面运行我的代码时,我无法得到它的工作原因,因为其中一个参数有时会为null,并且我想在参数为null时向该列中插入null。C# - 将null插入到SQL Compact Edition表中

我该如何解决这个问题?

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

你得到了什么错误?或者它不工作? – 2011-03-30 08:55:47

+1

当值参数值为空时,表示参数尚未设置。 – 2011-03-30 08:56:57

+0

在我看来,它应该工作。希望是这个问题。 – 2011-03-30 08:57:00

回答

8

我想你可以通过DBNull.Value为你的价值,当它为空:代替它

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

但你需要将Name或DBNull.Value转换为对象(c#编译器不会为你做这件事) – 2011-03-30 08:58:23

+0

当我尝试这个时我得到Operator'??'不能应用于'string'和'System.DBNull'类型的操作数 – 2011-03-30 09:01:40

+0

我认为DBNull是一个类,所以可以作为一个对象传递......但你可能是正确的,我不能使用?在不同类型的两面。 – 2011-03-30 09:05:21

4

检查,看看你的参数== NULL,如果是这样,无论是插入的DBNull或省略参数。

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

1

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

@parm1@parm2和 - 注重拼写 - @param3

并设置: - 在拼写焦点 - @parm1@parm1@parm3

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

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); 
     } 
    } 
相关问题