gpt4 book ai didi

c# - 使用空值执行存储过程

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:05 25 4
gpt4 key购买 nike

已在数据库中创建以下存储过程:

@se_code_melli varchar(10) = NULL,
@se_name nvarchar(30) = NULL,
@se_family nvarchar(30) = NULL,
@se_name_uni nvarchar(100) = NULL,
@se_name_reshte_tahsili nvarchar(50) = NULL

使用下面的命令,我想从我的 C# 程序运行存储过程:

if (comboBox11.SelectedIndex == -1)
{
comboBox11.SelectedValue = DBNull.Value;
}

if (comboBox12.SelectedIndex == -1)
{
comboBox12.SelectedValue = DBNull.Value;
}

sqlParams = new SqlParameter[]
{
new SqlParameter { ParameterName = "@se_code_melli", Value = (String.IsNullOrEmpty(textBox23.Text) ? DBNull.Value : (object)textBox23.Text)},
new SqlParameter { ParameterName = "@se_name", Value = (String.IsNullOrEmpty(textBox22.Text) ? DBNull.Value : (object)textBox22.Text)},
new SqlParameter { ParameterName = "@se_family", Value = (String.IsNullOrEmpty(textBox21.Text) ? DBNull.Value : (object)textBox21.Text)},
new SqlParameter { ParameterName = "@se_name_uni", Value =comboBox11.SelectedValue},
new SqlParameter { ParameterName = "@se_name_reshte_tahsili", Value =comboBox12.SelectedValue}
};

using (SamenEntities dbContext = new SamenEntities())
{
dataGridView1.DataSource = dbContext.Database.SqlQuery<SamenEntities>("storedProcedureName", sqlParams).SingleOrDefault();
}

但是我得到以下错误:

System.Data.SqlClient.SqlException: 'The parameterized query '(@se_code_melli nvarchar(10),@se_name nvarchar(4000),@se_family ' expects the parameter '@se_name_uni', which was not supplied.'

我试图解决NULL问题,但没有成功。

最佳答案

ADO.NET 有一个真的奇怪的特性:如果一个参数的值为null,它不会被发送。这让所有人感到困惑。相反,您必须手动避免添加 null,而是添加 DBNull.Value

很明显,您的 comboBox11.SelectedValue = DBNull.Value; 尝试没有成功,因此:将其设置为 ADO.NET 级别。

例如:

new SqlParameter {
ParameterName = "@se_name_uni",
Value = (object)comboBox11.SelectedValue ?? DBNull.Value
},

或者,大多数 ORM 或微型 ORM 工具会自动为您执行此操作。

关于c# - 使用空值执行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52131154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com