2012-02-15 13 views
2

私は10列のDataTableを持っていて、その中にいくつかの行を追加した後、SqlBulkCopyを使用してデータベースに追加したいと考えています。C#SqlBulkCopyの種類が一致しません

私の問題は、DataTableには文字列があり、データベースのいくつかのフィールドはそれぞれ小数点と日付です。それらを目的のデータ型に変換する方法はありますか?

+0

どのようにデータテーブルに列を追加しますか? – Arion

答えて

3

: -

DataTable dt = new DataTable(); 
dt.Columns.Add("FieldName", typeof(System.Decimal)); 

あなたがバルク・コピーを実行すると、これらが表彰されます。

ユーザーのコメントに応答して、EDIT

DataRowに情報を入力するとき、ソースデータがターゲットフィールドと一致しない場合、明示的変換はのみ必要です。

タイプが同じ場合は、それを割り当てることができます。

// With a decimal field, decimal target 
Decimal myNum = 123; 
// Works fine - assuming the Price datacolumn has been set up as a System.Decimal 
row["Price"] = myNum; 
+0

[OK]をクリックし、行を追加すると、どのように見えますか?私は文字列[]で必要なすべての情報を持っているので、追加する前にそれを変換しなければならないと仮定します。次に例を示します。DataRow row = dataTable.NewRow(); 行["Price"] = Convert.ToDecimal(blanketInfo [4]); dataTable.Rows.Add(row);私が持っているすべてのデータに対してこれを行う必要がありますか、それとも別の方法ですか? – Rocshy

+0

blanketInfo [4]の種類によって異なります。タイプがターゲットフィールドタイプを反映していない場合は、それを変換する必要があります。ただし、既に10進数の場合は、それを割り当てることができます。 –

0

DataTableの列をコードで作成しているようです(列データ型を適切に設定するDataAdapter経由での充填とは異なります)。

これが当てはまる場合は、すべての文字列ではなく正しいデータ型でDataColumnsを作成し、行を追加するときにデータを適切なものに変換することができますかタイプ?

DataTableが正しい型とデータを持つ場所に移動します。その結果、SqlBulkCopyは、正しい形式のデータを持つDBにブラストすることができます。プログラムで、あなたのDataTableに列を追加し、型を指定することができます

0

は、私が文字列を持つExcelファイルからデータをコピーすると仮定した場合と同じ問題を抱えていて、それらをデータベースにdoubleとして格納したかったのです。最初のシートから

DataTable dt = new DataTable(); 

//データの読み取り

製品(製品温度)がデータ型データベース内の列です
connExcel.Open(); 
    cmdExcel.CommandText = "SELECT * From [" + SheetName + "] "; 
     oda.SelectCommand = cmdExcel; 
     oda.Fill(dt); 
     connExcel.Close(); 


     Convert.ToDouble(dt.Columns["Product"]); 

// - :私は、以下の質問に関連したコードを貼り付けています浮動小数点であり、Excelファイルでは文字列です。

関連する問題