私は10列のDataTableを持っていて、その中にいくつかの行を追加した後、SqlBulkCopy
を使用してデータベースに追加したいと考えています。C#SqlBulkCopyの種類が一致しません
私の問題は、DataTableには文字列があり、データベースのいくつかのフィールドはそれぞれ小数点と日付です。それらを目的のデータ型に変換する方法はありますか?
私は10列のDataTableを持っていて、その中にいくつかの行を追加した後、SqlBulkCopy
を使用してデータベースに追加したいと考えています。C#SqlBulkCopyの種類が一致しません
私の問題は、DataTableには文字列があり、データベースのいくつかのフィールドはそれぞれ小数点と日付です。それらを目的のデータ型に変換する方法はありますか?
: -
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;
[OK]をクリックし、行を追加すると、どのように見えますか?私は文字列[]で必要なすべての情報を持っているので、追加する前にそれを変換しなければならないと仮定します。次に例を示します。DataRow row = dataTable.NewRow(); 行["Price"] = Convert.ToDecimal(blanketInfo [4]); dataTable.Rows.Add(row);私が持っているすべてのデータに対してこれを行う必要がありますか、それとも別の方法ですか? – Rocshy
blanketInfo [4]の種類によって異なります。タイプがターゲットフィールドタイプを反映していない場合は、それを変換する必要があります。ただし、既に10進数の場合は、それを割り当てることができます。 –
DataTableの列をコードで作成しているようです(列データ型を適切に設定するDataAdapter経由での充填とは異なります)。
これが当てはまる場合は、すべての文字列ではなく正しいデータ型でDataColumnsを作成し、行を追加するときにデータを適切なものに変換することができますかタイプ?
DataTableが正しい型とデータを持つ場所に移動します。その結果、SqlBulkCopyは、正しい形式のデータを持つDBにブラストすることができます。プログラムで、あなたのDataTableに列を追加し、型を指定することができます
は、私が文字列を持つ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ファイルでは文字列です。
どのようにデータテーブルに列を追加しますか? – Arion