数据表到SQL表失去精度

时间:2012-08-28 05:20:35

标签: c# asp.net excel

我有一个数据表,其值包含超过12个小数位(例如451234.123456789012),我从Excel工作表中获取。我正在使用用户定义的表将值从dattable插入到SQL表中。

在我的存储过程中,我有一个声明,如

insert into tblMytable(fld1, fld2..)
Select fld1, fld2,.. from @MyUDT

的问题:

  1. 假设所有Excel单元格类型都是'General'我在数据表中获得了完整的精度,但是当我将它插入到SQL表中时,除了2个精度之外我都失去了所有。

  2. 假设所有Excel单元格类型都是“文本”我的整个值只有12位数,包括非小数。小数部分。例如对于451234.123456789012,我在C#datatable中获得451234.12345。插入SQL表后我也一样。

  3. 在我的UDT中,字段定义为varchar(20),我使用varchar(45)进行了检查,但没有用。

1 个答案:

答案 0 :(得分:1)

我已经使用

处理了这个问题

由于我在读取excel类型作为C#datatable的一般性时获得了完全的精度,我通过将列类型单独更改为字符串来创建数据表克隆,因此我将获得所有字符串类型的值与完全精度一样,然后我将数据表传递给SQL 2008表而不会丢失精度,现在它工作正常。

代码:

dt= ds.Tables[0].Clone();
for (ICol = 0; ICol < ds.Tables[0].Columns.Count; ICol++)
    dt.Columns[ICol].DataType = typeof(string);
    foreach (DataRow row in ds.Tables[0].Rows) 
    {
        dt.ImportRow(row); 
}