【问题标题】:Parameter has no default value if previous param is null?如果前一个参数为空,则参数没有默认值?
【发布时间】:2013-07-29 13:43:23
【问题描述】:

除非我尝试在参数中传递空值,否则我有这个查询似乎可以工作:

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

这将返回错误Parameter ?_14 has no default value。如果我将上面的代码更改为 p12 参数为 null,则错误为 Parameter ?_13 has no default value

这是怎么回事?

【问题讨论】:

  • 附带说明:您可能希望传递 new DateTime(1999,1,1) 而不是 "1/1/1999"

标签: c# ado.net


【解决方案1】:

.Valuenull 的参数未通过。完全没有。

您需要传递 DBNull.Value 而不是传递 语义 null。例如:

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

(等)

And yes: I agree that this is ridiculous

【讨论】:

  • 这就解释了!我将我的行com.Parameters.Add("@p13", OleDbType.Date, 255).Value = null; 更改为com.Parameters.Add("@p13", OleDbType.Date, 255).Value = DBNull.Value;,它工作得很好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 2022-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多