web-dev-qa-db-fra.com

Comment passer une variable null à une procédure stockée SQL à partir de code .net C #

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

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

... alors copie pour la seconde.

74
Justin Niessner

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

25
Dan Diplo

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

9
marc_s

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.

7
Doomsknight

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é.

5
Lavamantis

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

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...
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