http://www.cnblogs.com/delphinet/archive/2010/03/09/1681777.html
正在寫一個類似文章的發表系統。其中記錄文章內容的字段Contents設計為varchar(Max)類型。
其中在DAL層調用存儲過程來插入數據的參數
SqlParameter[] parameters = {
new SqlParameter("@Contents", SqlDbType.VarChar)
……
}
當一次我插入大概7000字左右的文章時,提示如下錯誤:
[System.Data.SqlClient.SqlException] = {"傳入的表格格式數據流(TDS)遠程過程調用(RPC)協議流不正確。參數 8 (""@Contents""): 數據類型 0xA7 的數據長度或元數據長度無效。"}
看到這個錯誤,我就郁悶了,我已經把1萬字的文章保存成功了,可這次才7000左右,怎么會失敗?
幾經測試發現了一個現象:
插入小於4000個漢字,或漢字大於8000的時候,沒有問題。但當漢字字符數量在4000~8000之間的時候,
在網上轉悠了幾圈。終於解決了這個問題。
修改如下:
SqlParameter[] parameters = {
new SqlParameter("@Contents", SqlDbType.VarChar)
……
}
修改為:
SqlParameter[] parameters = {
new SqlParameter("@Contents", SqlDbType.VarChar,-1)
……
}
也就是,當類型為text、VarChar(Max)時其對應的size值為-1就可以了。
回過頭來再想想,為什么,沒有設置-1時,錄入大於8000字的時候,卻不報錯?
難道當文字在7000時,超過了Varchar所能存儲的4000漢字的最大上限而報錯?
而當文字超過8000時,無論是字符,還是漢字其數量都已經超過了VcharChar(8000)最大限制,此時系統自動轉成text或VarChar(Max)類型了??
請高手指點!