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不会变化(调试你就能看到),所以发生错误。
目前没有好的解决办法,只能说在对实体类赋值时判断,但如果值太多的话你就会判断不起了。呵呵。