2015-07-20 85 views
0

我要離開我SqlParameterSqlValue取消設置,以表明參數應設置爲默認值。這是根據MSDN documentation配置的SqlParameter爲默認值,能夠

使用null或不設置SqlValue使用參數的默認值。

當我嘗試執行與SqlParameter相關的SqlCommand,我收到一個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 
+0

您發佈了正確的方法在您的問題中執行此操作。 「」使用null或者不要設置SqlValue使用參數的默認值「你沒有做這兩件事中的任何一件你需要在你的過程中有一個默認的定義來使它正常工作 –

+0

@SeanLange,生成的SQL是我所得到的,如果我離開SqlValue未設置目標表定義了默認('CREATE TABLE WithDefault(現場INT NOT NULL DEFAULT(1));')。? –

+1

爲什麼不使用存儲過程,爲此,它將會使這個問題自行解決,你會得到一個圖層分離的應用程序,我看到你遇到的問題,但這不是我處理的問題,因爲我使用存儲過程的一切。 –

回答

0

我能想到的,將使用COALESCE()和傳球NULLs。例如:

EXECUTE sp_executesql N'SELECT COALESCE(@p0, 15);', N'@p0 INT', @p0 = NULL; 

但這似乎不符合您的A/C。

除此之外,我不知道這是否是可能的。