c# - 过程或函数需要未提供的参数。可空列抛出异常

标签 c# sql stored-procedures

我正在使用存储过程在 sql 数据库中创建/更新记录。我从我的 C# 数据访问层提供了大约 30 个参数。 sql 表除了其主键列外,所有列都可以为空。在这里,当我向可空列提供空值时,它抛出异常“过程或函数‘spFullUpdate’需要参数‘@App1TAPAYears’,未提供。”。在我的 C# 代码中,我可以清楚地看到该列提供了一个空值。谁能告诉我如何解决这个问题。 以下是我的代码片段。 数据对象的设置值如下

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

可以清楚地看到,添加了参数并将空值提供给可为空的列,但它仍然会产生异常。非常感谢任何人的帮助。

亲切的问候

最佳答案

可空 != DBNull.Value

因此您不能将(int?)null 传递给参数值,而是传递DBNull.Value

喜欢:

if (dataObject.TimeAtPreviousAddressYears.HasValue) 
{ 
    cmd.Parameters.Add("@App1TAPAYears", SqlDbType.Int).Value =dataObject.TimeAtPreviousAddressYears;
}else
{
    cmd.Parameters.Add("@App1TAPAYears", SqlDbType.Int).Value = DBNull.Value;
}

关于c# - 过程或函数需要未提供的参数。可空列抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18759335/

相关文章:

c# - 将不同的值添加到并发字典中的列表中

SQL:在A列最小的情况下快速获取B列的值

mysql - 这是一个有效的 MySQL 查询吗?

mysql - 如何使用此查询将动态表名传递到 mySQL 过程中?

mysql - 如何避免存储过程中的递归调用?

c# - 拳击,已成为过去?

c# - 我如何使用 Xamarin 为 Android 使用 SQLiteAsyncConnection?

C# 字符串连接

sql - 比较 SQL Server 中索引 View 和存储过程的性能

mysql - 这个 if/then 存储过程有什么问题?