2009-04-15 62 views
2

根據該MSDN docs,一列型/元件的DbType屬性/屬性僅用於創建數據庫。Column.DbType影響運行時行爲

然而,今天,嘗試將數據提交到圖像列SQLCE數據庫(不知道是否只有CE)上的時候,我得到的「數據截斷爲8000個字節」異常。這是由於DbType仍被定義爲SQLCE不支持的VARBINARY(MAX)。在DbType中將類型更改爲IMAGE可解決問題。

那麼什麼其他的驚喜不LINQ2SQL屬性在店內舉行?這是一個錯誤還是打算?我應該向MS報告嗎?

UPDATE

正從Guffa答案後,我測試了它,但它似乎對NVARCHAR(10)增加了11字符長度的字符串導致SQL異常,而不是一個LINQ2SQL。

The data was truncated while converting from one data type to another. 
    [ Name of function(if known) = ] 
A first chance exception of type 'System.Data.SqlServerCe.SqlCeException' 
    occurred in System.Data.SqlServerCe.dll 
+0

是的,異常來自ADO.NET,而不是從LINQ到SQL,因爲它是處理類型檢查的ADO.NET。 – Guffa 2009-04-15 14:21:55

回答

2

如果您要創建表格,則DbType只有需要,但這並不意味着它在其餘時間內將被忽略。

如果您例如定義大小爲100的VarChar列,則即使數據庫中的字段實際上可以容納該字符串,但如果您發送的字符串長度超過100個字符,您將收到一個異常。

文檔說,你不應該指定的DbType,如果不需要的話,作爲數據類型是從您使用的值推斷。但是,在某些情況下,您不希望它使用推斷出的DbType。

+0

謝謝,我不知道,但我發誓我從來沒有見過與VARCHAR行爲。將再次檢查:)也許這是一個L2S異常,而不是一個SQL。 – leppie 2009-04-15 12:58:25

1

這當然聽起來像MSDN文章可能產生誤導作用。不過,LINQ到SQL,同時還活着,沒有得到大量的開發時間,所以我不認爲我的呼吸等待更新。

您可以張貼在連接時,或者一個備註添加到MSDN頁面(社區內容)。

+0

謝謝Marc :)只要我不必編寫SQL,我將繼續使用和濫用Linq2SQL。 – leppie 2009-04-15 12:23:17