es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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];
Tags:  , , , ,

Answer

  1. Avatar for 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:

    cmd.Parameters.AddWithValue("@subeno", null);
    

    a:

    cmd.Parameters.AddWithValue("@subeno", DBNull.Value);
    

    Esto pasará un valor nulo al procedimiento almacenado y debería evitar el error “Parámetro no suministrado”.

Comments are closed.