2015-07-13 2 views
2

Как установить значение SqlParameter в эквивалент ключевого слова оператора SQL INSERT DEFAULT?SqlParameter - Установка значения DEFAULT

MSDN documentation говорит, что «использовать null или не устанавливать значение для использования значения по умолчанию для параметра». Тем не менее, выполнение результатов SqlException приводит к тому, что ожидаемый параметр не был предоставлен. Я также попытался установить параметр в DBNull.Value, но это приводит к жалобе о том, что нулевые значения не разрешены.

Каков правильный способ сделать это?

-- table schema 
CREATE TABLE SomeTable (Field INT NOT NULL DEFAULT(1)); 


using (var command = this.conn.CreateCommand()) 
{ 
    command.CommandText = "INSERT [dbo].[SomeTable] ([Field]) VALUES (@p0);"; 

    var param = new SqlParameter(); 
    param.ParameterName = "@p0"; 
    //param.Value = ??; 
    command.Parameters.Add(param); 

    command.ExecuteNonQuery(); 
} 

ответ

4

Согласно информации, которую я нашел, трюк с назначением null к стоимости работ, но при использовании для параметров хранимой процедуры.

Я думаю, вы хотите использовать код, который вы опубликовали, чтобы вставить в таблицу некоторые пользовательские значения, а также значение по умолчанию. Если это так, я полагаю, самый простой способ сделать ваш код работать, чтобы вызвать другой запрос, если не указано значение:

... 
int? myValue = null; // I assumed You use a nullable int to pass the value to the method 
... 
if (!myValue.HasValue) 
{ 
    command.CommandText = "INSERT [dbo].[SomeTable] ([Field]) VALUES (DEFAULT);"; 
} 
else 
{ 
    command.CommandText = "INSERT [dbo].[SomeTable] ([Field]) VALUES (@p0);"; 

    var param = new SqlParameter(); 
    param.ParameterName = "@p0"; 
    param.Value = myValue.Value; 
    param.DbType = System.Data.DbType.Int32; 
    command.Parameters.Add(param); 
} 

command.ExecuteNonQuery(); 

Это позволит Вам обрабатывать как по умолчанию и не по умолчанию случаи.

+0

Спасибо! Это усложняет предварительную компиляцию, а затем повторное использование команды с разными наборами параметров, но это то, что она есть. –

Смежные вопросы