2014-12-02 2 views
1

Я хотел бы добавить некоторые нуль, чтобы таблица:Использование нуль при добавлении параметров SQL

command.CommandText = 
"INSERT into clients (Addres, companyID) VALUES (@Addres, @companyID) ; select SCOPE_IDENTITY();"; 
command.Parameters.AddWithValue("@Addres", null); 
command.Parameters.AddWithValue("@companyID", null); 

Таблица dessign позволяет нуль-х. Почему у меня такая ошибка?

The parameterized query '(@Addres nvarchar(4000),@companyID nvarchar(4000))INSERT into cl' expects the parameter '@Addres', which was not supplied. 

ответ

4

Используйте вместо этого DBNull.Value.

command.Parameters.AddWithValue("@Addres", DBNull.Value); 
command.Parameters.AddWithValue("@companyID", DBNull.Value); 
+1

Документация ссылка: http://msdn.microsoft.com/en-us/library/system.data .sqlclient.sqlparametercollection.addwithvalue% 28v = vs.110% 29.aspx – Maarten

2

Вы должны использовать DBNull класс для нулевых значений в SQL. Ваш код будет выглядеть следующим образом:

command.Parameters.AddWithValue("@Addres", DBNull.Value); 
command.Parameters.AddWithValue("@companyID", DBNull.Value); 
2

Вы можете использовать System.Data.SqlTypes.SqlString.Null

command.Parameters.AddWithValue("@Addres", System.Data.SqlTypes.SqlString.Null); 
command.Parameters.AddWithValue("@companyID", System.Data.SqlTypes.SqlString.Null); 

Read: Handling Null Values

DBNull.Value может быть использован для любого типа, в отличие от SqlTypes.

Это может быть удобно, чтобы сделать код более читаемым и типобезопасным, например:

var addrVal = new System.Data.SqlTypes.SqlString(someAddress); 
// ... 
if (condition) addrVal = System.Data.SqlTypes.SqlString.Null; 
command.Parameters.AddWithValue("@Addres", addrVal); 
+0

Что делать, если параметр не является строкой? –

+0

@ThorstenDittmar: но в этом случае это строка, оба являются 'nvarchar', поэтому я ее использовал. Если это 'int' (например):' SqlInt32.Null'. Это версия типа «безопасная». –

+0

Я просто хотел, чтобы это упоминалось :-D –

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