Le paramètre n’a pas de valeur par défaut si le paramètre précédent est null?

J’ai cette requête qui semble fonctionner sauf si j’essaie de passer une valeur null dans un paramètre:

using (OleDbCommand com = new OleDbCommand("INSERT INTO [GROUP] ([Group Number], [Group Name], [Address 1], " + " [Address 2], [City State Zip], [Phone], [Carrier Code], [Retail Plan Num 1], [Retail Plan Num 2], " + " [Retail Plan Num 3], [Retail Plan Num 4], [Retail Plan Num 5], [Plan Start Date 1], [Plan Start Date 2], " + " [Plan Start Date 3], [Plan Start Date 4], [Plan Start Date 5]" + ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", con)) { com.Parameters.Add("@p0", OleDbType.Char, 255).Value = values[0]; com.Parameters.Add("@p1", OleDbType.Char, 255).Value = values[1]; com.Parameters.Add("@p2", OleDbType.Char, 255).Value = values[2]; com.Parameters.Add("@p3", OleDbType.Char, 255).Value = values[3]; com.Parameters.Add("@p4", OleDbType.Char, 255).Value = values[4]; com.Parameters.Add("@p5", OleDbType.Char, 255).Value = values[5]; com.Parameters.Add("@p6", OleDbType.Char, 255).Value = values[6]; ssortingng[] values7 = values[7].Split('\t'); com.Parameters.Add("@p7", OleDbType.Char, 255).Value = values7[0]; com.Parameters.Add("@p8", OleDbType.Char, 255).Value = values7[1]; com.Parameters.Add("@p9", OleDbType.Char, 255).Value = values7[2]; com.Parameters.Add("@p10", OleDbType.Char, 255).Value = values7[3]; com.Parameters.Add("@p11", OleDbType.Char, 255).Value = values7[4]; com.Parameters.Add("@p12", OleDbType.Date, 255).Value = "1/1/1999"; com.Parameters.Add("@p13", OleDbType.Date, 255).Value = null; com.Parameters.Add("@p14", OleDbType.Date, 255).Value = "1/1/1999"; com.Parameters.Add("@p15", OleDbType.Date, 255).Value = "1/1/1999"; com.Parameters.Add("@p16", OleDbType.Date, 255).Value = "1/1/1999"; com.ExecuteNonQuery(); } 

Cela renverra une erreur. Le Parameter ?_14 has no default value . Si je modifie le code ci-dessus pour que le paramètre p12 soit null, alors l’erreur indique Parameter ?_13 has no default value .

Que se passe t-il ici?

Les parameters avec une valeur null ne sont pas passés . Du tout.

Vous devez plutôt transmettre DBNull.Value pour transmettre un null sémantique . Par exemple:

 com.Parameters.Add("@p7", OleDbType.Char, 255).Value = ((object)values7[0]) ?? DBNull.Value; 

(etc)

Et oui: je suis d’accord que c’est ridicule