2012-08-28 65 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); 
}