2019年5月21日 星期二

C# - 內送的表格式資料流(TDS) 遠端程序呼叫(RPC) 通訊協定資料流不正確


今天在跨 DB 批次塞資料的時候出現這個錯誤,












一開始以為是某筆資料問題、或是組 Insert SQL 哪邊沒處理好,
查了好久終於找到是寫 Log 的地方存檔錯誤,
根據參數 @p5 推斷出對應的欄位,
該欄位的資料型態是 VARCHAR(MAX),
於是乎終於在 GOOGLE 下對了關鍵字
"c# varchar max TDS RPC"

然後找到了發生一樣問題的文章
使用DbCommand傳遞參數發生例外
SQLCLR-SqlString Max Size 8000 Limitation

根據文章我的理解是這樣的,
在產生 Insert SQL 的時候,會去計算內容大小,
8000 以內跟 8000 以上產生的 statement 不一樣,
但如果內容有中文時,會造成計算上的錯誤,
所以就出現這個錯誤訊息了,
最後改法沒用文章裡面的解法,
直接把 VARCHAR(MAX) 改成 NVARCHAR(MAX) 結束。

沒有留言:

張貼留言