2016-05-12 17 views
0

データソースの背後にあるコードおよび/または接続)がデータバインド(後にクローズする必要があるのでしょうか?私のコードは、あなたが最終的にトライキャッチを使用しなければならないデータソースと接続の背後にあるコードは使用後に閉じる必要がありますか?

Dim conn As SqlConnection = New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("DefaultDataBaseServer").ConnectionString) 
    conn.Open() 
    Dim sql As String = lblConcept.Text.Replace("@xxxxxx", xxxxxID.Value) 
    Dim myCommand As SqlCommand = New SqlCommand(sql, conn) 
    ckConceptList.DataSource = myCommand.ExecuteReader() 
    ckConceptList.DataBind() 

答えて

1

vb.netです。

try 
Dim conn As SqlConnection = New SqlConnection (System.Configuration.ConfigurationManager.ConnectionStrings("DefaultDataBaseServer").ConnectionString) 
conn.Open() 
Dim sql As String = lblConcept.Text.Replace("@xxxxxx", xxxxxID.Value) 
Dim myCommand As SqlCommand = New SqlCommand(sql, conn) 
ckConceptList.DataSource = myCommand.ExecuteReader() 
ckConceptList.DataBind() 


Catch ex As Exception 

Finally 
     If pConn.State = ConnectionState.Open Then 
      pConn.Close() 
     End If 
    End Try 
3

does a code behind datasource and/or a connection need to be closed after databind()

用語「背後にあるコード」とのDataBind()は、これはいくつかのウェブ技術に関連していることをほのめかすが、どのようなタグがありアレント。一般的に

しかし、Dispose()方法を持っているものは、それはおそらく、これらのリソースを解放するだけでなくだけでなく、閉鎖されるべきボンネットの下にいくつかのリソースを割り当てますが、Disposedことを示しています。

グラフィックスに配置されていないペン、ブラシとビットマップのような(う!)できるオブジェクトを最終的に例外「GDI +で汎用エラー」悪名高いを上げます。しかし、ConnectionsやCommandオブジェクトなどのDBオブジェクトが未公開のまま残ると、アプリがリークする可能性があります。 This questionは、For Loopに新しいDBCommandオブジェクトを作成せずに、システムリソース超過例外が発生しました。

NET Usingブロック(C#でusing())が閉じて、これらのものを処分することを簡単に。以下もSQLにパラメータではなく、String.Replace()を使用する方法を示します:Carol's Cookie Shoppe

  • Parameters.Add()にあなたがデータを指定することができますとして埋め込まティックのよう

    Dim SQL = "SELECT a, b, c FROM SomeTable WHERE Foo = @name" 
    Dim dt As New DataTable 
    Using dbcon As New MySqlConnection(MySQLConnStr) 
        Using cmd As New MySqlCommand(sql, dbcon) 
    
         cmd.Parameters.Add("@name", MySqlDbType.Text).Value = lblConcept.Text 
    
         dbcon.Open() 
         dt.Load(cmd.ExecuteReader()) 
         dgv2.DataSource = dt 
        End Using   ' dispose of cmd 
    End Using    ' dispose of dbcon 
    
    • String.Replaceは文句を言わないでも、簡単なものから守りますあなたはVBにそれを残すとき

    Usingを推測する(Dim)新しい変数を宣言し、それを初期化し、そのOTHができないデータ型エラーをタイプして避けます同じ範囲内の変数dbConまたはcmd。また、新しいブロックスコープも作成されます。それらのターゲット変数とその中で宣言されたものは、そのブロックにローカルになります。上記はブロック外のデータテーブルを宣言し、他の場所で使用することができます。あなたはそのようにインデントを減らすためにUsing Sを積み重ねたり、組み合わせることができます。

    Using dbcon As New MySqlConnection(MySQLConnStr), 
        cmd As New MySqlCommand(sql, dbcon) 
    
        dbcon.Open() 
        dt.Load(cmd.ExecuteReader()) 
        dgv2.DataSource = dt 
    
    End Using 
    

    VBエディタがそれについて少し風変わりである - インテリセンスを文句を言わない作業が終了するまでcmdためdbcon変数パラメータを支援し、ブロックを閉じます。

    詳細情報:

    Connection Poolingは、NETはDBConnectionsを作成するコストを最小限に抑える方法を説明します。

    Using Statement (Visual Basic)。引用、そこから:

    時々、あなたのコードは、ファイルハンドルなどの非管理リソース、COMラッパー、またはSQL接続が必要です。Usingブロックは、コードが終了したときにそのようなリソースを1つ以上廃棄することを保証します。これにより、他のコードを使用できるようになります。

    IDisposable(通常)Dispose方法が実装されている方法です。備考は読む価値があります。

    Avoiding Problems with the Using Statementは疑問の解消やUsing文でTry/Catchブロックを組み合わせるwhereforesを説明しています。また、さまざまな状況で2つを組み合わせて使用​​する方法について説明したポストもたくさんあります。

    How do I create a parameterized SQL query? Why Should I?

  • 関連する問題