Ich rufe eine gespeicherte SQL-Prozedur aus einem Stück C # .net-Code auf:
SqlHelper.ExecuteDataset(sqlConnection, CommandType.StoredProcedure, STORED_PROC_NAME, sqlParameters);
wobei die Variable sqlParameters
definiert ist als:
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;
Ich muss jetzt noch zwei weitere Parameter an diesen Stored Proc übergeben (beide sind vom Typ SqlDateTime
), die in diesem Fall nachNULLgehen.
Vielen Dank,
IM
SqlParameters[1] = new SqlParameter("Date1", SqlDbType.SqlDateTime);
SqlParameters[1].Value = DBNull.Value;
SqlParameters[1].Direction = ParameterDirection.Input;
... dann für den zweiten kopieren.
Verwenden Sie DBNull.Value
Besser noch, stellen Sie für Ihre gespeicherten Prozedurparameter den Standardwert NULL ein. Oder verwenden Sie einen Nullable<DateTime>
-Parameter, wenn der Parameter manchmal ein gültiges DateTime-Objekt ist
Sie können den DBNull.Value
in die .Value-Eigenschaft des Parameters übergeben:
SqlParameters[0] = new SqlParameter("LedgerID", SqlDbType.BigInt );
SqlParameters[0].Value = DBNull.Value;
Passen Sie die Einstellungen für Ihre beiden DateTime-Parameter natürlich an, und zeigen Sie hier, wie Sie den DBNull.Value
-Eigenschaftswert verwenden.
Marc
Ich benutze eine Methode, um in DBNull zu konvertieren, wenn es null ist
// Converts to DBNull, if Null
public static object ToDBNull(object value)
{
if (null != value)
return value;
return DBNull.Value;
}
Wenn Sie den Parameter einstellen, rufen Sie einfach die Funktion auf
sqlComm.Parameters.Add(new SqlParameter("@NoteNo", LibraryHelper.ToDBNull(NoteNo)));
Dadurch wird sichergestellt, dass alle Nullen in DBNull.Value geändert werden.
Alte Frage, aber hier ist eine ziemlich saubere Methode zum Erstellen eines nullbaren Parameters:
new SqlParameter("@note", (object) request.Body ?? DBNull.Value);
Wenn request.Body einen Wert hat, wird dieser Wert verwendet. Wenn es null ist, wird DbNull.Value verwendet.
versuche dies! Syntax weniger Zeilen und noch kompakter! Vergessen Sie nicht, die Eigenschaften hinzuzufügen, die Sie mit diesem Ansatz hinzufügen möchten!
cmd.Parameters.Add(new SqlParameter{SqlValue=(object)username??DBNull.Value,ParameterName="user" } );
Angenommen, der Name des Parameters lautet "Id" in Ihrer gespeicherten SQL-Prozedur, und die C # -Funktion, die Sie zum Aufrufen der gespeicherten Datenbankprozedur verwenden, hat den Namen Typ int?
. In Anbetracht dessen könnte Folgendes Ihr Problem lösen:
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