私は検索してきましたが、達成するための良い例は見つかりませんでした。タイトルはそれをすべて言います。これは私がこれまで持っているものです。C#を使用してDataTableからOracleにバルク挿入
//gather the report details
DataTable dtReturn = new DataTable();
DataTable dtResults = new DataTable();
string strScript = "";
bool doReturnData = false;
try
{
//this function returns my SQL table in to a datatable dtReturn:
var ii =
Utility.db.Connection.EstablishDBConnection("usp_get_data_recap", dtReturn, null, null, true, 60);
//Clear out table before insert
dtResults = OracleDataPull(9, "TRUNCATE TABLE user.SIGNUP_1");
OracleParameter myparam = new OracleParameter();
OracleCommand mycommand = new OracleCommand();
int n;
//bulk insert to the signup_1 table from the datatable members. Datatable contains the same 4 fields being inserted in to signup_1 on the oracle side:
mycommand.CommandText = "INSERT INTO user.SIGNUP_1 ([ID], [ACCOUNT_NUMBER], [MAIN_CUSTOMER], [SIGNUP_DATE]) VALUES(?)";
mycommand.Parameters.Add(myparam);
for (n = 0; n < 100000; n++)
{
[what do i do here?]
}
}
私はこれが正しいかどうかを確認していない、あるいはもっと簡単な方法があれば、私はIDにdtReturn.Rows [n]は[0-3]をマップする必要があります、account_number、main_customer、およびsignup_dateをそれぞれ指定します。
非常に感謝しています!前もって感謝します!
編集:
私は以下の提案を試みたが、ラムダ式を使用してエラーを取得しています: は、「それはデリゲート型ではありませんので、 『文字列』を入力するラムダ式を変換できません」:
var ii =
Utility.db.Connection.EstablishDBConnection("usp_get_data", dtReturn, null, null, true, 60);
dtResults = OracleDataPull(9, "TRUNCATE TABLE user.PR_data");
OracleParameter myparam = new OracleParameter();
OracleCommand mycommand = new OracleCommand();
mycommand.ArrayBindCount = dtReturn.Rows.Count;
mycommand.Parameters.Add(":myparam", OracleDbType.Varchar2, dtReturn.Select(c => c.myparam).ToArray(), ParameterDirection.Input);
mycommand.ExecuteNonQuery();
int n;
mycommand.CommandText = "INSERT INTO user.PR_data ([ID], [ACCOUNT_NUMBER], [MAIN_CUSTOMER], [SIGNUP_DATE]) VALUES(?)";
mycommand.Parameters.Add(myparam);
for (n = 0; n < 100000; n++)
{
myparam.Value = n + 1;
mycommand.ExecuteNonQuery();
}
dtResults = Utility.db.Connection.oracletoDataTable(strScript, doReturnData);
これは、正しい結果が得られるように設定されているかどうかもわかりません。私はどこに間違っているのかアドバイスできますか?
ところで、挿入したいフィールド?それはあなたのデータテーブルにありますか? –
この投稿をご覧ください:https://stackoverflow.com/questions/343299/bulk-insert-to-oracle-using-net/797636#797636提示された問題は、あなたがマイナーな違いを持っているものに似ています。 –
私が挿入したいフィールドは、上記の私の投稿に示したもので、私の投稿に示したOracleテーブルに移動する必要があります。そして、はい、私はそのポストを見ました。それは私が上にある私の論理を引っ張ったところで、残念ながらそれが必要な場所ではありません。 Oracleへの一括挿入用のデータテーブル(上記のレイアウト)をトラバースできる必要があります。ありがとう! –