Я оставляю параметр SqlValue
моего SqlParameter
неустановленным, чтобы указать, что для параметра должно быть установлено значение по умолчанию. Это согласно Документация MSDN:
Используйте null или не устанавливайте SqlValue, чтобы использовать значение по умолчанию для параметра.
Когда я пытаюсь выполнить SqlCommand
, связанный с SqlParameter
, я получаю сообщение об ошибке SQL, жалующееся на то, что
параметризованный запрос '...' ожидает параметр '@p0', который не был предоставлен.
Проблема в том, что сгенерированный запрос вызывает sp_executesql
без указания того, что параметр может иметь значение по умолчанию.
Сгенерированный SQL (проблемный):
exec sp_executesql N'INSERT [dbo].[WithDefault] ([Field]) VALUES (@p0);',N'@p0 int',@p0=default
Правильный SQL:
exec sp_executesql N'INSERT [dbo].[WithDefault] ([Field]) VALUES (@p0);',N'@p0 int=default',@p0=default
(Обратите внимание =default
после @p0 int
)
Вопрос:
Как настроить SqlParameter
так, чтобы он включал =default
вместе с типом данных параметра?
Я бы представил что-то вроде:
param.DbType = System.Data.DbType.Int32;
param.IsDefaultable = true; // but this property doesn't exist
CREATE TABLE WithDefault (Field INT NOT NULL DEFAULT(1));
). - person Ben Gribaudo   schedule 20.07.2015