Оставям 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