• 締切済み

DBへのOPENについて

DBへのOPENについて 無限ループの処理の中でDBへ取得、更新をします。 無限ループの中で毎回Openするのはいけてないと思うので、例外などに入ったときのみCloseしてあとはOpenのままでいたいと思っています。 つまりCloseされていたらOpenするという処理をしたいのですがどうやったらいいのでしょうか。 ↓無限ループしている箇所からの呼び出し Public Sub AA () Dim cn As System.Data.SqlClient.SqlConnection Dim ServerName As String = "AA" Dim DBName As String = "BB" try cn = New System.Data.SqlClient.SqlConnection If cn.State = Data.ConnectionState.Closed Then cn.ConnectionString = "Data Source = " & ServerName & _ ";Initial Catalog = " & DBName & _ ";Integrated Security = SSPI" cn.Open() End if Catch ex As Exception cn.close() End try End Sub こんな感じかなと思いましたが、これだと毎回Newしているのでなにかおかしい気がしてしまいます。 環境 SQL Server2008 ADO.net VB.net

みんなの回答

noname#140925
noname#140925
回答No.3

>処理に障害が発生しても処理が止まる事がないようにしたいのです。 SQLエラーが発生したからって、勝手にコネクション切れたりしませんが・・・ try~catchの中でSQL発行して、エラーが起きたら、catchの中で適切なエラー処理を行って、呼び出し元へきちんと処理を返せば良いだけですよね。 なので、エラーが起きても続行する事と、コネクションを操作する事に関連性はありませんよね。 まぁ、貴方のやり方で言うなら、cnをグローバルに取るなり、その関数の呼び元で生成して引数で渡して来るなりして、オブジェクト自体は呼び元で生成。 こちらの関数内では、openとcloseだけを行う。 オブジェクトの破棄は、再度呼び出し元で。 とでもやれば、貴方の思っているようなのが出来るのでは?

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

単純に考えて、「Openフラグ立ておいて判定」は不可?

jam-best
質問者

補足

回答ありがとうございます。 フラグを用意しなくても、コネクションの状態でわかりませんか?

noname#140925
noname#140925
回答No.1

無限ループする前にオープンして、無限ループを抜けた後にクローズしてください。 何で無限ループの中でオープン、クローズ処理を行おうとしているのかが理解できません。 なお、catchの中でコネクションをクローズする際には、コネクションが生成されているかどうか判定した上で、コネクションが生きている場合だけクローズするようにしましょう。

jam-best
質問者

補足

回答ありがとうございます。 処理に障害が発生しても処理が止まる事がないようにしたいのです。 なのでオープン処理をループ内にいれて、なにかあってもまたオープンする処理を入れたかったのですが。