- ベストアンサー
SQLSERVERのINSERT文について
VB2005 SQLSERVER EXPRESS 2005 上記環境で、データベースの追加作業をしています。 大量データ(1万件ほど)をINSERTしたときに、 下記エラーが途中で表示されます。エラー表示まではINSERTできています。 途中からまた開始すると、ある程度INSERTされて、エラー表示されます。 サーバーへの接続を確立しているときにエラーが発生しました。 SQL Server 2005 に接続しているときときにこのエラーが発生した場合は、SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因である可能性があります。 (provider: TCP プロバイダ, error: 0 - 通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます。) <ソース> For Each Row In Table.Rows --省略-- SqlStr = "INSERT INTO テーブル VALUES (Row("フィールドA")" SqlCmd.CommandText = SqlStr Cn.Open() SqlCmd.ExecuteNonQuery() Cn.Close() Next フィールドは50ほどです。文法のエラーはないと思います。 接続と切断を繰り返すとリソース不足でエラーになるのでしょうか? ご教授願います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
エラー原因の特定はできませんが、 毎回、Open、Closeする理由はあるのでしょうか? 理由がなければ、 Cn.Open() For Each Row In Table.Rows --省略-- SqlStr = "INSERT INTO テーブル VALUES (Row("フィールドA")" SqlCmd.CommandText = SqlStr SqlCmd.ExecuteNonQuery() Next Cn.Close() してみるとか・・・ または、SqlBulkCopyを利用してみるとか・・・
その他の回答 (1)
通常50回程度でクライアントのリソース不足になることは考えられません。 メッセージ内容からして、サーバー側が時間内にコネクションを開く要求にこたえられていないのだと思います。 原因は良くわかりませんが、解決法としてはNo1のおっしゃる通りだと思います。 エラーの原因を突き止めたいなら、何回目でエラーが起きるのか、 それは毎回同じ回数なのか、あたりからはじめると思います。
補足
皆様方のお早いお返事ありがとうございます。 OpenCloseはループの外に設定しています。記入間違いです。 申し訳ありません。 省略してありますが、DataRowStateの値で追加、更新、削除の3つの コマンドをループしています。 毎回違うのですが、4、5000件のデータの時点でエラーになります。 サンプルデータは毎回違うものを使用しています(エラーの続きから) ので、データやテーブル設計は問題ないと思いますが、、、