Как передать пустую переменную в хранимую процедуру SQL из кода C # .net - PullRequest
63 голосов
/ 30 июля 2009

Я вызываю хранимую процедуру SQL из фрагмента кода C # .net:

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;

Теперь мне нужно передать еще два параметра в этот сохраненный процесс (оба типа SqlDateTime), которые в этом случае будут равны NULL .

Спасибо

IN

Ответы [ 8 ]

79 голосов
/ 30 июля 2009
SqlParameters[1] = new SqlParameter("Date1", SqlDbType.SqlDateTime);
SqlParameters[1].Value = DBNull.Value;
SqlParameters[1].Direction = ParameterDirection.Input;

... затем скопируйте для второго.

25 голосов
/ 30 июля 2009

Используйте DBNull.Value Еще лучше, чтобы параметры хранимой процедуры имели значения по умолчанию NULL. Или используйте параметр Nullable<DateTime>, если этот параметр иногда будет допустимым объектом DateTime

9 голосов
/ 30 июля 2009

Вы можете передать DBNull.Value в свойство параметра .Value:

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

Просто настройте два параметра DateTime, очевидно, просто показывая, как использовать значение свойства DBNull.Value здесь.

Марк

7 голосов
/ 18 ноября 2011

Я использую метод для преобразования в 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, иначе он останется прежним.

6 голосов
/ 27 июня 2017

Старый вопрос, но вот довольно чистый способ создания обнуляемого параметра:

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

Если request.Body имеет значение, то используется его значение. Если он нулевой, то используется DbNull.Value.

1 голос
/ 31 июля 2015

попробуйте это! Синтаксис меньше строк и еще компактнее! не забудьте добавить свойства, которые вы хотите добавить с помощью этого подхода!

cmd.Parameters.Add(new SqlParameter{SqlValue=(object)username??DBNull.Value,ParameterName="user" }  );
0 голосов
/ 03 августа 2015

Скажем, имя параметра «Id» в вашей хранимой процедуре 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...
0 голосов
/ 30 июля 2009
    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...