2011-03-30 15 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); 
     } 
    } 
相關問題