3

I have this query which seems to work unless I try to pass a null value in a parameter:

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];

                        string[] 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();
                    }

This will return an error Parameter ?_14 has no default value. If I change my code above so the p12 parameter is null, then the error says Parameter ?_13 has no default value.

What's going on here?

Felipe Oriani
  • 37,948
  • 19
  • 131
  • 194
Jeff Brady
  • 1,454
  • 7
  • 35
  • 56

1 Answers1

14

Parameters with a .Value of null are not passed. At all.

You need to pass DBNull.Value instead to pass a semantic null. For example:

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

(etc)

And yes: I agree that this is ridiculous

Community
  • 1
  • 1
Marc Gravell
  • 1,026,079
  • 266
  • 2,566
  • 2,900
  • That would explain it! I changed my line `com.Parameters.Add("@p13", OleDbType.Date, 255).Value = null;` to `com.Parameters.Add("@p13", OleDbType.Date, 255).Value = DBNull.Value;` and it worked just fine. Thank you! – Jeff Brady Jul 29 '13 at 13:47