【发布时间】:2013-09-12 08:35:04
【问题描述】:
我正在使用存储过程在 sql db 中创建/更新记录。我从我的 C# 数据访问层提供了大约 30 个参数。 sql 表除了其主键列之外,所有列都可以为空。在这里,当我向可空列提供空值时,它会引发“过程或函数'spFullUpdate'需要参数'@App1TAPAYears',未提供。”的异常。在我的 c# 代码中,我可以清楚地看到该列提供了一个空值。请任何人告诉我如何纠正这个问题。 以下是我的代码 sn-p。 数据对象的设置值如下
Dt.TimeAtPreviousAddressYears = int.TryParse(TimeatPreviousAddressYears.Text, out intOut) ? intOut : (int?)null;
以下是我的实体类中的可为空属性
public int? TimeAtPreviousAddressYears { get; set; }
我的数据访问层添加参数代码如下
cmd.Parameters.Add("@App1TAPAYears", SqlDbType.Int).Value = dataObject.TimeAtPreviousAddressYears;
SqlDataAdapter da = new SqlDataAdapter(cmd);
conn.Open();
cmd.ExecuteNonQuery();
可以清楚地看到,添加了参数并将空值提供给可以为空的列,但它仍然产生异常。任何人的帮助将不胜感激。
亲切的问候
【问题讨论】:
-
请显示您添加所有参数的代码,直到您执行 SP。 (编辑您的帖子)
-
代码很好,因为当我为这个参数提供值时它不会产生异常。仅在值为 null 时引发异常。
-
只是想确定一下。已经看到很多关于未提供参数的问题,这是由于在查询之前再次创建命令对象引起的。
-
在我的例子中,命令参数创建成功。问题出在空值上。
-
在命令参数列表中,@App1TAPAYears 的 IsNullable 属性设置为 false 并且值为“null”。
标签: c# sql stored-procedures