繁体   English   中英

ADO.NET:发送带有 null 值的程序参数

[英]ADO.NET: Send procedure parameter with null value

我需要向程序发送一个参数 null 值,但出现错误:

System.Data.SqlClient.SqlException:'过程或 function'sel_mizanyeni' 需要参数'@subeno',但未提供。'

当我在 SQL 服务器中使用相同的参数运行相同的程序时,它不会导致错误。 当我在 C# 中使用 ADO.NET 运行它时,我得到了那个错误。

在 SQL 服务器上运行 state:

exec sel_mizanyeni 
     @subeno=null,
     @tarih='2021-12-28 00:00:00',
     @kirilimlevel=8,
     @detaylevel=3,
     @hesap1=N'342',
     @hesap2=N'343',
     @dovizcinsi=0,
     @bakiyeverenler=1,
     @optnetbakiye=1,
     @optdisticsir=0,
     @opteval=0,
     @kurtarihi='2021-12-28 00:00:00',
     @yilsonu=0,
     @firmano=NULL,
     @ekno=NULL,
     @ikitariharasi=0,
     @bittarih='2021-12-28 00:00:00',
     @migration=1

此代码在 C# 中不起作用:

SqlCommand cmd = new SqlCommand("sel_mizanyeni", baglanti);
cmd.CommandType = CommandType.StoredProcedure;

// I need to pass NULL here, but I get the mentioned error
cmd.Parameters.AddWithValue("@subeno", null);

cmd.Parameters.AddWithValue("@tarih", "2021-12-28 00:00:00");
cmd.Parameters.AddWithValue("@kirilimlevel", 8);
cmd.Parameters.AddWithValue("@detaylevel", 3);
cmd.Parameters.AddWithValue("@hesap1", "342");
cmd.Parameters.AddWithValue("@hesap2", "343");
cmd.Parameters.AddWithValue("@dovizcinsi", 0);
cmd.Parameters.AddWithValue("@bakiyeverenler", 1);
cmd.Parameters.AddWithValue("@optnetbakiye", 1);
cmd.Parameters.AddWithValue("@optdisticsir", 0);
cmd.Parameters.AddWithValue("@opteval", 0);
cmd.Parameters.AddWithValue("@kurtarihi", "2021-12-28 00:00:00");
cmd.Parameters.AddWithValue("@yilsonu", 0);

cmd.Parameters.AddWithValue("@firmano", null);
cmd.Parameters.AddWithValue("@ekno", null);

cmd.Parameters.AddWithValue("@ikitariharasi", 0);
cmd.Parameters.AddWithValue("@bittarih", "2021-12-28 00:00:00");
cmd.Parameters.AddWithValue("migration", 1);

SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);

dataGridView1.DataSource = ds.Tables[0];

指定参数数据类型 - ADO.NET 文档

当您向服务器发送 null 参数值时,您必须指定 DBNull,而不是 null(Visual Basic 中为 Nothing)。 系统中的 null 值为空的 object 没有任何值。 DBNull 用于表示 null 值。

因此,使用DBNull.Value而不是null作为参数值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM