J'appelle une procédure stockée SQL à partir d'un morceau de code C # .net:
SqlHelper.ExecuteDataset(sqlConnection, CommandType.StoredProcedure, STORED_PROC_NAME, sqlParameters);
où la variable sqlParameters
est définie comme suit:
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;
Je dois maintenant passer deux autres paramètres à ce processus stocké (les deux sont de type SqlDateTime
), qui vont dansNULLdans ce cas.
Merci,
DANS
SqlParameters[1] = new SqlParameter("Date1", SqlDbType.SqlDateTime);
SqlParameters[1].Value = DBNull.Value;
SqlParameters[1].Direction = ParameterDirection.Input;
... alors copie pour la seconde.
Utilisez DBNull.Value
Mieux encore, définissez les paramètres par défaut de vos procédures stockées sur NULL. Ou utilisez un paramètre Nullable<DateTime>
si le paramètre est parfois un objet DateTime valide
Vous pouvez passer le DBNull.Value
dans la propriété .Value du paramètre:
SqlParameters[0] = new SqlParameter("LedgerID", SqlDbType.BigInt );
SqlParameters[0].Value = DBNull.Value;
Ajustez simplement vos deux paramètres DateTime, bien évidemment, en montrant simplement comment utiliser la valeur de la propriété DBNull.Value
ici.
Marc
J'utilise une méthode pour convertir en DBNull si elle est nulle
// Converts to DBNull, if Null
public static object ToDBNull(object value)
{
if (null != value)
return value;
return DBNull.Value;
}
Donc, lors du réglage du paramètre, il suffit d'appeler la fonction
sqlComm.Parameters.Add(new SqlParameter("@NoteNo", LibraryHelper.ToDBNull(NoteNo)));
Cela garantira les valeurs nulles, deviendra DBNull.Value, sinon il restera le même.
Ancienne question, mais voici une façon assez simple de créer un paramètre nullable:
new SqlParameter("@note", (object) request.Body ?? DBNull.Value);
Si request.Body a une valeur, sa valeur est utilisée. Si c'est null, alors DbNull.Value est utilisé.
essaye ça! syntaxe moins de lignes et encore plus compacte! N'oubliez pas d'ajouter les propriétés que vous souhaitez ajouter avec cette approche!
cmd.Parameters.Add(new SqlParameter{SqlValue=(object)username??DBNull.Value,ParameterName="user" } );
Supposons que le nom du paramètre soit "Id" dans votre procédure stockée SQL et que la fonction C # que vous utilisez pour appeler la procédure stockée de base de données porte le nom de type int?
. Étant donné que, ce qui suit pourrait résoudre votre problème:
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...
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