Как передать значение null в SQL хранимой процедуры с C#.net код



Im вызов хранимой процедуры 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;


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



спасибо,



на

949   8  

8 ответов:

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 в параметра .Значение свойства:

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

просто настроить для ваших двух параметров DateTime, очевидно-просто показывая, как использовать DBNull.Value стоимости недвижимости здесь.

Марк

Я использую метод для преобразования в DBNull, если он равен null

    // 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.Значение, иначе оно останется таким же.

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

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

если запрос.Тело имеет значение, то это значение используется. Если это null, то DbNull.Используется значение.

    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

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

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

предположим, что имя параметра - " 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...

Comments

    Ничего не найдено.