복붙노트

[SQL] 어떻게 C # .NET 코드에서 저장 프로 시저는 SQL에 널 변수를 전달하는 방법

SQL

어떻게 C # .NET 코드에서 저장 프로 시저는 SQL에 널 변수를 전달하는 방법

임 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;

나는이 경우 NULL로 가고있다, (두 유형의 SqlDateTime의이다), 지금이 저장된 프로 시저에 다른 두 개의 매개 변수를 전달해야합니다.

감사,

해결법

  1. ==============================

    1.

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

    ... 다음 두 번째에 대한 복사합니다.

  2. ==============================

    2.사용 DBNull.Value 더 나은 아직, 당신의 저장 프로 시저 매개 변수가 NULL의 기본값을가합니다. 아니면 Null 허용을 사용하여 <날짜 시간> 매개 변수 매개 변수는 때때로 유효한 DateTime 개체 될 경우

    사용 DBNull.Value 더 나은 아직, 당신의 저장 프로 시저 매개 변수가 NULL의 기본값을가합니다. 아니면 Null 허용을 사용하여 <날짜 시간> 매개 변수 매개 변수는 때때로 유효한 DateTime 개체 될 경우

  3. ==============================

    3.당신은 매개 변수의 .Value 속성에 DBNull.Value를 전달할 수 있습니다 :

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

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

    그냥 분명, 당신이 개 날짜 시간 매개 변수를 조정 - 바로 여기에 DBNull.Value 속성 값을 사용하는 방법을 보여주는.

    즙을 짜고 난 찌꺼기

  4. ==============================

    4.null의 경우 나는 DBNull이로 변환하는 방법을 사용

    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)));
    

    이것은 다른 사람이 동일하게 유지됩니다, DBNull.Value로 변경 얻을, 어떤 null을 보장합니다.

  5. ==============================

    5.여기에 오래된 질문 만은 널 (NULL) 매개 변수를 만들 수있는 매우 깨끗한 방법 :

    여기에 오래된 질문 만은 널 (NULL) 매개 변수를 만들 수있는 매우 깨끗한 방법 :

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

    request.Body에 값이있는 경우, 다음의 값이 사용됩니다. 그것은이 null의 경우, DbNull.Value가 사용됩니다.

  6. ==============================

    6.이 시도! 구문 덜 라인과 더욱 컴팩트! 이 접근 방식을 추가 할 속성을 추가하는 것을 잊지 마세요!

    이 시도! 구문 덜 라인과 더욱 컴팩트! 이 접근 방식을 추가 할 속성을 추가하는 것을 잊지 마세요!

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

    7.

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

    8.하자의 매개 변수의 이름이 SQL 저장 프로 시저에서 "이드"라고하고, C #을 기능을 사용하면 데이터베이스 저장 프로 시저가 int 형의 이름을 호출하는 데 사용하는? 다음은 문제를 해결할 수 있음을 감안할 때 :

    하자의 매개 변수의 이름이 SQL 저장 프로 시저에서 "이드"라고하고, 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...
    
  9. from https://stackoverflow.com/questions/1207404/how-to-pass-a-null-variable-to-a-sql-stored-procedure-from-c-net-code by cc-by-sa and MIT license