0

451234.123456789012Excel シートからフェッチしている小数点以下 12 桁を超える値 (例: ) を含むデータテーブルがあります。ユーザー定義テーブルを使用して、データテーブルから SQL テーブルに値を挿入しています。

私のストアドプロシージャには、次のようなステートメントがあります。

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

問題:

  1. すべての Excel セル タイプが「一般」であるとします。データ テーブルで完全な精度が得られますが、これを SQL テーブルに挿入すると、2 つの精度を除くすべてが失われます。

  2. すべての Excel セル タイプが「テキスト」であるとします。非 10 進数を含む値全体で 12 桁しか得られません。小数部。たとえば451234.123456789012、私は451234.12345C# データテーブルを取得しています。そして、SQLテーブルに挿入した後も同じです。

私のUDTでは、フィールドは次のように定義されています。varchar(20)チェックしましvarchar(45)たが、使用しません。

4

1 に答える 1

2

私は使用して問題を処理しました、

Excel 型を C# データテーブルの一般的なものとして読み取りながら完全な精度を得ているので、列の型だけを文字列として変更してデータテーブルのクローンを作成し、すべての文字列型と完全な値を取得できるようにしました。精度、次に精度を失うことなくデータテーブルを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 に答える