遭遇:“傳入的表格格式數據流(TDS)遠程過程調用(RPC)協議流不正確” 錯誤


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)類型了??

請高手指點!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM