it-swarm.com.de

Wie übergeben Sie eine leere Variable an eine gespeicherte SQL-Prozedur von C # .net-Code

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

62
Irfy
SqlParameters[1] = new SqlParameter("Date1", SqlDbType.SqlDateTime);
SqlParameters[1].Value = DBNull.Value;
SqlParameters[1].Direction = ParameterDirection.Input;

... dann für den zweiten kopieren.

74
Justin Niessner

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

25
Dan Diplo

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

9
marc_s

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.

7
Doomsknight

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.

5
Lavamantis

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" }  );
1
GoAntonio

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...
0
ablaze
    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
0
Mike Z