Programing

C # .net 코드에서 SQL 저장 프로 시저에 null 변수를 전달하는 방법

lottogame 2020. 11. 24. 07:32
반응형

C # .net 코드에서 SQL 저장 프로 시저에 null 변수를 전달하는 방법


C # .net 코드에서 SQL 저장 프로 시저를 호출합니다.

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;

이제이 Stored Proc에 다른 두 개의 매개 변수를 전달해야합니다 (둘 다 유형입니다 SqlDateTime) .이 경우 NULL 이됩니다.

감사,


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

... 두 번째 복사합니다.


를 사용하여 DBNull.Value더 나은 아직, 당신의 저장 프로 시저 매개 변수가 NULL의 기본값을가합니다. 또는 Nullable<DateTime>매개 변수가 때때로 유효한 DateTime 객체가되는 경우 매개 변수를 사용 합니다.


DBNull.Value매개 변수의 .Value 속성에를 전달할 수 있습니다 .

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

두 개의 DateTime 매개 변수를 조정하기 만하면 DBNull.Value됩니다. 여기서 속성 값 을 사용하는 방법 만 보여줍니다 .

마크


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로 변경됩니다. 그렇지 않으면 동일하게 유지됩니다.


오래된 질문이지만 여기에 nullable 매개 변수를 만드는 상당히 깨끗한 방법이 있습니다.

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

request.Body에 값이 있으면 해당 값이 사용됩니다. null이면 DbNull.Value가 사용됩니다.


이 시도! 구문은 줄이 적고 훨씬 더 간결합니다! 이 접근 방식으로 추가하려는 속성을 추가하는 것을 잊지 마십시오!

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

    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

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

참고 URL : https://stackoverflow.com/questions/1207404/how-to-pass-a-null-variable-to-a-sql-stored-procedure-from-c-net-code

반응형