2017-09-12 50 views
0

我使用EF5從.NET應用程序中調用存儲過程與CHAR參數導致參數與巨大的價值

從EF

return base.ExecuteFunction<sp_select_contracts_Result>("sp_select_contracts", x, y, z); 

在呼叫調用存儲過程[MS SQL]該參數定義爲@para1 CHAR(2)

但在SQL事件探查器PROC我抓到EF發送以下

exec [dbo].[sp_select_contracts_statistics] @x='15                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                '@y='24                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ',@z='2010                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ' 

正是這樣 - 實際值後的大量空間。

當我改變CHARVARCHAR它正常工作:

exec [dbo].[sp_select_contracts_statistics] @x='15','@y='24,@z='2010

我可以解決這一點很容易,但我想知道我失蹤 這裏。

更新: 忘了提及在C#中所有的值都是字符串。 在從C#之前通過EF去最後一次通話的值是否正確: x = "15" {String}等。

EDIT2: 更改煤焦到VARCHAR處理工作按預期。仍然會更喜歡知道這是一個錯誤還是我們錯過的東西。

+0

而你的參數是如何定義在你的應用程序?很顯然,這是應用程序通過所有空間... – sepupic

+0

啊我忘了那部分:/ 他們都是字符串,在通過EF之前的最後一次調用,值是正確的。 – AngelicCore

+0

我不知道C#,但是那些字符串在這些定義中有沒有SIZE?例如,當你定義一個char數據類型時,你也應該精確的確定它的大小:例如char(50)。如果你不這樣做,默認大小是1.是否可以在C#中有一個默認大小,如8000,如果你沒有明確定義它,它使用默認大小? – sepupic

回答

0

當你定義一個char參數時,你必須定義最大長度,否則它會做一些奇怪的事情。它默認爲所有其他字符放置空白,而不是爲最大尺寸的全部長度定義。我猜EF的最大尺寸默認爲char這裏是相當大的:

var parm = new SqlParameter("x", SqlDbType.Char, 2); 
parm.Value = "15"; 
+0

這可能是真的,但我認爲這應該由EF而不是手動完成。 – AngelicCore

+0

EF不知道存儲過程的參數類型是什麼。你必須自己設定。 –

+0

難道它不能推斷這種類型?我的意思是它是在存儲過程中定義的,而EF已經獲得了其他一切 - storedProc本身及其參數,甚至返回類型。 我錯過了什麼嗎? – AngelicCore