2012-08-28 66 views
0

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

在我的存储过程我有这样一个说法,

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

问题:

  1. 假设所有的Excel单元格类型是“常规”我得到了全精度数据表,但是当我将它插入到SQL表中时,我将失去除2精度之外的所有内容。

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

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

+0

是您的数据表将它们转换为18字符精度为十进制?或者是数据表全部是字符串? –

+0

@Ted,我是usig oledbDataAdaptor来填补excell到数据表,我没有做任何转换。 – Wilz

+0

数据库中那些列的数据类型是什么?另外:你说* SQL *(结构化查询语言) - 但你的意思是** SQL Server ** - Microsoft RDBMS - 对吗? –

回答

1

我已经处理使用问题,

因为我得到了充分的精度,同时读取Excel类型一般到C#的DataTable,我改变了列字符串单独类型创建一个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); 
}