ADO.NET: Enviar un parámetro de una procedimiento con valor nulo
Necesito enviar un parámetro con un valor nulo al procedimiento, pero obtengo un error:
System.Data.SqlClient.SqlException: ‘El procedimiento o la función ‘sel_mizanyeni’ espera el parámetro ‘@subeno’, que no se proporcionó.’
Cuando ejecuto el mismo procedimiento con los mismos parámetros en SQL Server, no causa ningún error. Sin embargo, cuando lo ejecuto con ADO.NET en C#, obtengo ese error.
Estado de ejecución en SQL Server:
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
Este código no funciona en C#:
SqlCommand cmd = new SqlCommand("sel_mizanyeni", baglanti);
cmd.CommandType = CommandType.StoredProcedure;
// Necesito pasar NULL aquí, pero obtengo el error mencionado
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];
davy.ai
Para pasar un valor nulo como parámetro en ADO.NET, debes establecer explícitamente el valor del parámetro como DBNull.Value en lugar de null.
Entonces, en este caso, cambia esta línea:
a:
Esto pasará un valor nulo al procedimiento almacenado y debería evitar el error “Parámetro no suministrado”.