- PR -

毎回SqlConnectionのインスタンスを作成&接続することに関して

投稿者投稿内容
檜山
会議室デビュー日: 2006/04/13
投稿数: 15
投稿日時: 2006-05-10 16:48
引用:

じゃんぬねっとさんの書き込み (2006-05-10 15:35) より:

「改善前は、なぜ改善されていないのか?」と言っているのと同じですね。

止まってはいないですね。(;^-^)
負荷が全く増えないわけではないですが、接続しっぱなしによる危険コストの方が高いです。



あぁッ!すみません…スレッドが別ページまで続いていることを完全に見落としておりました
VB6からASPで改善されたということも含めて該当スレッドを一通り読み、コレで納得できます。
ちなみに「使い回し」というのは具体的には例えばVB6で以下のような流れのことで
これと同様の処理をVB2005+ADO.NETでやろうとしたら
cn.ExecuteやProcedure2に該当する部分でも
新たにSqlConnectionのインスタンス作成・接続・切断するんですよね、
ということでした。
コード:
Dim cn As ADODB.Connection

Private Sub Form_Load()
    Set cn = New ADODB.Connection
    cn.ConnectionString = "接続文字列"
    cn.Open
    Call Procedure1
    cn.Close
End Sub

Private Sub Procedure1()
    Dim rs As New ADODB.RecordSet
    rs.Open "クエリA", cn
    Do Until rs.EOF
        'クエリAでJOINやサブクエリを使用すると複雑で保守性が下がるため
        'コード側で別クエリ処理する
        'あるいはcn.Execute "rs("特定フィールド")を使用したクエリ"
        Call Procedure2(rs("特定フィールド"))
        .MoveNext
    Loop
    rs.Close
End Sub

Private Sub Procedure2(ByVal field As String)
    Dim rs As New ADODB.RecordSet
    rs.Open "引数fieldを使用したクエリB", cn    'cnの「使い回し」
    Do Until rs.EOF
        'なんらかの処理
        .MoveNext
    Loop
    rs.Close
End Sub



かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-05-10 17:03
僕がやるとしたらこんな感じですね
ADODB なんですね・・・
コード:

Private Sub Form_Load
Procedure0
End Sub

Private Sub Procedure0
コネクション作成
Try
コネクションオープン
Procedure1(コネクション)
Procedure2(コネクション)
Finally
コネクションクローズ
コネクション破棄
End Try

Private Sub Procedure1(コネクション)
コマンド発行
End Sub
Private Sub Procedure2(コネクション)
コマンド発行
End Sub



#追加
Procedure1,2の処理によります。
データ接続の後に何かいろいろやるならコネクションを分けます
ただ持ってくるなら上の通り

[ メッセージ編集済み 編集者: かるあ 編集日時 2006-05-10 17:05 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-10 17:09
引用:

檜山さんの書き込み (2006-05-10 16:48) より:

ちなみに「使い回し」というのは具体的には例えばVB6で以下のような流れのことで
これと同様の処理をVB2005+ADO.NETでやろうとしたら
cn.ExecuteやProcedure2に該当する部分でも
新たにSqlConnectionのインスタンス作成・接続・切断するんですよね、
ということでした。


いえ、こういう連続した処理は「まとめて」良いと思います。
このあたりは、こちらのスレッドが参考になると思います。

  連続するデータベースアクセス処理の記述方法

どうも、「前提のすれ違い」でうまく話がかみ合ってなかったようです。
すみません、少々きついことを言ってしまったかもしれません。(*_ _)

引用:

かるあさんの書き込み (2006-05-10 17:03) より:

ADODB なんですね・・・


VB6 での例だから ADODB になっているのだと思います。
ちなみに、VB7 以降では、ReleaseComObject しておく必要がありますね。(^^)

# 一般的に ADODB は、使わないでしょうけど...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)