2016-05-16 54 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]);

感谢。