2016-05-16 1 views
0

J'ai une méthode dynamique pour insérer SQL. Lorsque je mets une valeur nulle ou vide sur le paramètre, mon ExecuteNonQuery() échoue ... Comment l'ajuster?SqlCeParameter null

J'utilise Compact Edition 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

Les colonnes sont-elles nulles? A quoi ressemble le SQL généré? –

+0

Ma colonne accepte les valeurs nulles. – Pedro

+1

Quel genre d'erreur obtenez-vous? –

Répondre

0

Vous devez passer DBNull.Value au lieu de null.

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

J'ai essayé de passer des paramètres.Add (nouveau SqlCeParameter (pn, item.Value ?? DBNull.Value)); Pas de travail pour moi ... – Pedro

+0

@Pedro: "Pas de travail pour moi" ne décrit pas le problème que vous voyez. –

0

J'ai trouvé la réponse. Je traversais un objet chaîne aux valeurs ...

Mauvais code dictionary.Add(column.ToString(), row[column].ToString());

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

Merci.