read - sql c# stored procedure return value
Cómo pasar una variable nula a un procedimiento almacenado de SQL desde el código C#.net (8)
¡prueba esto! sintaxis menos líneas y aún más compacto! ¡no olvide agregar las propiedades que desea agregar con este enfoque!
cmd.Parameters.Add(new SqlParameter{SqlValue=(object)username??DBNull.Value,ParameterName="user" } );
Estoy llamando a un procedimiento almacenado de SQL desde un código de C # .net:
SqlHelper.ExecuteDataset(sqlConnection, CommandType.StoredProcedure, STORED_PROC_NAME, sqlParameters);
donde la variable sqlParameters
se define como:
SqlParameter[] sqlParameters = new SqlParameter[SQL_NUMBER_PARAMETERS];
Log.Logger.Debug(string.Format("Running proc: {0} ", STORED_PROC_NAME));
SqlParameters[0] = new SqlParameter("fieldID", SqlDbType.BigInt );
SqlParameters[0].Value = fieldID;
SqlParameters[0].Direction = ParameterDirection.Input;
Necesito ahora pasar otros dos parámetros a este Stored Proc, (ambos son de tipo SqlDateTime
), que van a NULL en este caso.
Gracias,
EN
Digamos que el nombre del parámetro es "Id" en su procedimiento SQL almacenado, y la función C # que está utilizando para llamar al procedimiento almacenado de la base de datos es el nombre de tipo int?
. Dado que, el siguiente podría resolver su problema:
public void storedProcedureName(Nullable<int> id, string name)
{
var idParameter = id.HasValue ?
new SqlParameter("Id", id) :
new SqlParameter { ParameterName = "Id", SqlDbType = SqlDbType.Int, Value = DBNull.Value };
// to be continued...
Pregunta anterior, pero aquí hay una forma bastante clara de crear un parámetro que admite nulos:
new SqlParameter("@note", (object) request.Body ?? DBNull.Value);
Si request.Body tiene un valor, entonces se usa su valor. Si es nulo, entonces se usa DbNull.Value.
Puede pasar DBNull.Value
en la propiedad .Value del parámetro:
SqlParameters[0] = new SqlParameter("LedgerID", SqlDbType.BigInt );
SqlParameters[0].Value = DBNull.Value;
Simplemente ajuste sus dos parámetros DateTime, obviamente, simplemente mostrando cómo usar el valor de la propiedad DBNull.Value
aquí.
Bagazo
Use DBNull.Value
Mejor aún, haga que los parámetros de su procedimiento almacenado tengan un valor predeterminado de NULL. O use un Nullable<DateTime>
si el parámetro a veces será un objeto DateTime válido
Yo uso un método para convertir a DBNull si es nulo
// Converts to DBNull, if Null
public static object ToDBNull(object value)
{
if (null != value)
return value;
return DBNull.Value;
}
Entonces, al configurar el parámetro, solo llame a la función
sqlComm.Parameters.Add(new SqlParameter("@NoteNo", LibraryHelper.ToDBNull(NoteNo)));
Esto asegurará los nulos, se cambiará a DBNull.Value, de lo contrario, seguirá siendo el mismo.
SQLParam = cmd.Parameters.Add("@RetailerID", SqlDbType.Int, 4)
If p_RetailerID.Length = 0 Or p_RetailerID = "0" Then
SQLParam.Value = DBNull.Value
Else
SQLParam.Value = p_RetailerID
End If
SqlParameters[1] = new SqlParameter("Date1", SqlDbType.SqlDateTime);
SqlParameters[1].Value = DBNull.Value;
SqlParameters[1].Direction = ParameterDirection.Input;
... luego copia para el segundo.