SQLServer異常:傳入的表格格式資料流(TDS)遠端過程呼叫(RPC)協議流不正確。

wangccsy發表於2013-03-22
C#在進行SQL Server資料庫插入的時候,發生如下的問題(異常) ,從網上也看到很多朋友遇到這樣的問題。
System.Data.SqlClient.SqlException (0x80131904):
傳入的表格格式資料流(TDS)遠端過程呼叫(RPC)協議流不正確。引數 22 (“@p19”): 提供的值不是資料型別 real 的有效例項。請檢查源資料中的無效值。例如,小數位數大於精度的數值型別的資料即為無效值。
基本可以總結的就是插入的某個值的精度大於資料庫型別的精度,從而發生了異常。
不管你是用JDBC還是LINQ還是其它的什麼,最好的辦法是輸出你的SQL語句,這樣你就能很清晰的判斷出是哪個欄位超長了。
我由遇到的問題就是我的一個real型別欄位超長了。
在C#中值是1.98E-41,而real只能存放1.0E-38的值。
在C#中就算你強制轉換(float)doublevalue,其實在記憶體中還是1.98E-41不會變化(除錯你就能看到),所以發生錯誤。
目前沒有好的解決辦法,只能說在對實體類賦值時判斷,但如果值太多的話你就會判斷不起了。呵呵。


相關文章