2016-05-16 53 views
0

我有一個動態的方法來插入SQL。當我在參數上放置一個空值或空值時,我的ExecuteNonQuery()失敗...如何調整它?SqlCeParameter null

我使用SQL Server精簡版:

public static void SqlInsert(string table, Dictionary<string, object> values) 
{ 
     using (var conn = new SqlCeConnection(ConnectionStringDestino)) 
     { 
      conn.Open(); 

      var equals = new List<string>(); 
      var columns = new List<string>(); 
      var parameters = new List<SqlCeParameter>(); 
      var i = 0; 
      foreach (var item in values) 
      { 
       var pn = "@sp" + i; 
       columns.Add(string.Format(item.Key)); 
       equals.Add(string.Format("{0}", pn)); 
       parameters.Add(new SqlCeParameter(pn, item.Value)); 
       i++; 
      } 

      string command = string.Format("INSERT INTO {0} ({1}) VALUES ({2}) ", table, string.Join(", ", columns.ToArray()), string.Join(", ", equals.ToArray())); 

      var sqlcommand = new SqlCeCommand(command, conn); 
      sqlcommand.Parameters.AddRange(parameters.ToArray()); 
      sqlcommand.ExecuteNonQuery(); 
     } 
} 
+0

列是否無效?生成的SQL看起來像什麼? –

+0

我的列接受空值。 – Pedro

+1

你會得到什麼樣的錯誤? –

回答

0

您應該傳遞,而不是空DBNull.Value。

parameters.Add(new SqlCeParameter(pn, item.Value ?? DBNull.Value)); 
+0

我試過傳遞parameters.Add(new SqlCeParameter(pn,item.Value ?? DBNull.Value));沒有工作對我... – Pedro

+0

@佩德羅:「沒有工作對我來說」並不描述你看到的問題。 –

0

我找到了答案。我正在經歷一個String對象的值...

錯誤代碼dictionary.Add(column.ToString(), row[column].ToString());

正確dictionary.Add(column.ToString(), row[column]);

感謝。