質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

解決済

C# 分割してcommitを発行させるにはどうしたらいいでしょうか。

kumakumatan
kumakumatan

総合スコア207

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

3回答

0リアクション

0クリップ

693閲覧

投稿2022/07/04 05:30

編集2022/07/04 05:52

C# で10万件のデータを一括インサートをする際、アプリのメモリが落ちてしまい、
インサートできないでいます。これを分割して(5千件毎に)Insertしてcommitを発行させる方法をご教授いただきたく
思います。

C#

List<string> listA = new List<string>(); //10万件追加 listA.Add(xxxx); StringBuilder strSql = new StringBuilder(); OracleConnection objConn; OracleCommand objCmd; OracleTransaction objTran = null; objTran = objConn.BeginTransaction(); //トランザクション開始 strSql.AppendLine("INSERT INTO TABLE1"); strSql.AppendLine(" ("); strSql.AppendLine(" TEST1"); strSql.AppendLine(" ) "); strSql.AppendLine("VALUES ("); strSql.AppendLine(" :A"); strSql.AppendLine(" ) "); objCmd = new OracleCommand(); { objCmd.Connection = objConn; objCmd.BindByName = true; objCmd.ArrayBindCount = listA.Count; OracleParameter oraA; oraA = new OracleParameter("A", OracleDbType.Varchar2, ParameterDirection.Input); oraA.ArrayBindSize = listA.Count; oraA.Value = listA.ToArray(); objCmd.Parameters.Add(oraA); objCmd.CommandType = CommandType.Text; objCmd.CommandText = strSql.ToString(); intResult = objCmd.ExecuteNonQuery(); } objTran.Commit();//コミット

宜しくお願い致します。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

KOZ6.0

2022/07/04 07:30

これ本当に実行できますか? OracleParameter.ArrayBindSize は int[] なので oraA.ArrayBindSize = listA.Count; の行がコンパイルエラーになるはずです。
dodox86

2022/07/04 07:53

提示のコードは多分、質問用にオリジナルのコードを編集し、端折っているのでしょうね。提示のコードではobjConnをいきなり使っているし。 > OracleConnection objConn; ... > objTran = objConn.BeginTransaction(); //トランザクション開始 質問のテーマとしては少し興味ありますが、10万件のデータを生成してどこでアプリが落ちているかにもよりますね。10万件をlistA.Add()しているところでメモリ使用量が増えてアップアップしそうですし、あとでlistA.ToArray()したところまた肥大しそうです。executeNonQuery()実行時に止めを刺している可能性も。テンポラリファイルにいったん保存して、外部ツールのSQL*Loaderを起動して実行するなんて手もありそうです。
KOZ6.0

2022/07/04 08:05

あと、oraA.ArrayBindSize には項目長の配列を入れるのですが、TABLE1.TEST1 の項目長はいくつですか?

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。