0

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

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

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

问题:

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

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

在我的 UDT 中,字段定义为varchar(20),我检查过varchar(45)但没有用。

4

1 回答 1

2

我已经处理了这个问题,

由于我在读取与 C# 数据表一样通用的 excel 类型时获得了完整的精度,因此我通过将列类型单独更改为字符串来创建数据表克隆,这样我将获得所有字符串类型以及完整的值精度,然后我将数据表传递给 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); 
}
于 2012-08-28T10:54:12.137 回答