web-dev-qa-db-ja.com

C#.netコードからSQLストアドプロシージャにnull変数を渡す方法

CのC#.netコードからSQLストアドプロシージャを呼び出すIm:

SqlHelper.ExecuteDataset(sqlConnection, CommandType.StoredProcedure, STORED_PROC_NAME, sqlParameters);

sqlParameters変数は次のように定義されます:

        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;

ここで、このストアドプロシージャに別の2つのパラメーターを渡す必要があります(両方ともSqlDateTime型です)[〜#〜] null [〜#〜] inこの場合。

おかげで、

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

...次に2つ目のコピーを作成します。

80
Justin Niessner

つかいます DBNull.Valueさらに、ストアドプロシージャパラメータのデフォルトをNULLにしてください。または、Nullable<DateTime>パラメーター(パラメーターが有効なDateTimeオブジェクトになる場合がある場合)

25
Dan Diplo

DBNull.Valueをパラメーターの.Valueプロパティに渡すことができます。

    SqlParameters[0] = new SqlParameter("LedgerID", SqlDbType.BigInt );
    SqlParameters[0].Value = DBNull.Value;

当然、2つのDateTimeパラメーターを調整します。ここでは、DBNull.Valueプロパティ値の使用方法を示しています。

マーク

9
marc_s

Nullの場合、DBNullに変換するメソッドを使用します

    // Converts to DBNull, if Null
    public static object ToDBNull(object value)
    {
        if (null != value)
            return value;
        return DBNull.Value;
    }

したがって、パラメータを設定するときは、関数を呼び出すだけです

    sqlComm.Parameters.Add(new SqlParameter("@NoteNo", LibraryHelper.ToDBNull(NoteNo)));

これにより、nullが確実にDBNull.Valueに変更され、それ以外の場合は同じままになります。

7
Doomsknight

古い質問ですが、null許容パラメーターを作成するかなりきれいな方法は次のとおりです。

new SqlParameter("@note", (object) request.Body ?? DBNull.Value);

Request.Bodyに値がある場合、その値が使用されます。 nullの場合、DbNull.Valueが使用されます。

6
Lavamantis

これを試して!シンタックスを減らし、さらにコンパクトに!このアプローチで追加するプロパティを追加することを忘れないでください!

cmd.Parameters.Add(new SqlParameter{SqlValue=(object)username??DBNull.Value,ParameterName="user" }  );
1
GoAntonio

SQLストアドプロシージャのパラメータの名前が「Id」であり、データベースストアドプロシージャを呼び出すために使用しているC#関数の名前がint?。それを考えると、以下はあなたの問題を解決するかもしれません:

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