2012-02-29 15 views
0

GridViewのデータをoracleデータベースに挿入するためのコードは次のとおりです。データベース接続が終了していません

Protected Sub btnInsert_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnInsert.Click 
     Dim con = New OleDbConnection("Data Source=sml2; User ID=sfpl; Password=a; provider=OraOLEDB.Oracle") 
     con.Open() 
     For Each gvRow As GridViewRow In GridView1.Rows 
      Dim trndate As Date = ddlTrnDte.SelectedValue 
      Dim ZoneNo As Integer = ddlZone.SelectedValue 
      Dim DocNo As TextBox = CType(gvRow.FindControl("txtDocNo"), TextBox) 
      Dim VehCod As DropDownList = CType(gvRow.FindControl("ddlVeh"), DropDownList) 
      Dim CircleNo As DropDownList = CType(gvRow.FindControl("ddlCircle"), DropDownList) 
      Dim Contractor As DropDownList = CType(gvRow.FindControl("ddlContractor"), DropDownList) 
      Dim Supplier As DropDownList = CType(gvRow.FindControl("ddlSupplier"), DropDownList) 
      Dim NetWt As TextBox = CType(gvRow.FindControl("txtNetWt"), TextBox) 
      Dim Rate As TextBox = CType(gvRow.FindControl("txtRate"), TextBox) 
      Dim SNF As TextBox = CType(gvRow.FindControl("txtSNF"), TextBox) 
      Dim FAT As TextBox = CType(gvRow.FindControl("txtFAT"), TextBox) 
      Dim LR As TextBox = CType(gvRow.FindControl("txtLR"), TextBox) 
      Dim TS As TextBox = CType(gvRow.FindControl("txtTS"), TextBox) 
      'Create Connection 


      Dim cmd As OleDbCommand = New OleDbCommand("Insert into MLK_02_01 (TRN_DTE,ZONE_NO,CIRCLE_NO,CNT_NO,DOC_NO,SUP_COD,VEH_NUM,NET_WEIGHT,Q_SNF,Q_FAT,Q_LR,Q_TS,RATE,veh_cod) VALUES (:TRN_DTE,:ZONE_NO,:CIRCLE_NO,:CNT_NO,:DOC_NO,:SUP_COD,:VEH_NUM,:NET_WEIGHT,:Q_SNF,:Q_FAT,:Q_LR,:Q_TS,:RATE,:veh_cod)", con) 
      cmd.Parameters.Clear() 
      'TrnDate 
      cmd.Parameters.Add(":trn_dte", (OleDb.OleDbType.Date)) 
      cmd.Parameters(":trn_dte").Value = DateTime.Now() 
      cmd.Parameters(":trn_dte").Value = ddlTrnDte.SelectedValue 
      cmd.Parameters.AddWithValue(":ZONE_no", ZoneNo) 
      cmd.Parameters.AddWithValue(":CIRCLE_no", CircleNo.SelectedValue) 
      cmd.Parameters.AddWithValue(":CNT_no", Contractor.SelectedValue) 
      cmd.Parameters.AddWithValue(":Doc_No", DocNo.Text) 
      cmd.Parameters.AddWithValue(":sup_cod", Contractor.SelectedValue) 
      cmd.Parameters.AddWithValue(":Veh_num", VehCod.SelectedItem.Text) 
      cmd.Parameters.AddWithValue(":NET_WEIGHT", NetWt.Text) 
      cmd.Parameters.AddWithValue(":Q_SNF", SNF.Text) 
      cmd.Parameters.AddWithValue(":Q_FAT", FAT.Text) 
      cmd.Parameters.AddWithValue(":Q_LR", LR.Text) 
      cmd.Parameters.AddWithValue(":Q_TS", TS.Text) 
      cmd.Parameters.AddWithValue(":rate", Rate.Text) 
      cmd.Parameters.AddWithValue(":veh_cod", VehCod.SelectedValue) 


      cmd.ExecuteNonQuery() 
      Label1.Text = "All Records are Saved Successfully" 
      con.Close() 
      btnInsert.Enabled = False 
     Next 

    End Sub 

データはデータベースに正常に挿入されますが、フォームが閉じられるとデータベース接続は終了しません。さらなる通信エラーを排除するためにデータベースセッションを終了する際に助けが必要です。

+0

私の質問への回答を知っている人はいますか –

答えて

0

これはページなので、これはASPページであると仮定しています。

IISには、デフォルトでデータベース接続プールが有効になっています。これは、コードが接続を閉じたとしても、IISは次の要求からの次のクエリをより高速に実行するために接続を維持することを意味します。

は、接続プーリングを無効にするには、データベース接続文字列でこれを追加します。

プール= falseを

New OleDbConnection("Data Source=sml2; User ID=sfpl; Password=a; provider=OraOLEDB.Oracle; Pooling=false") 

また、これまでお使いの実行変更後:

cmd.ExecuteNonQuery() 
cmd.Dispose() 

con.Close()の後:

con.Close() 
con.Dispose() 

これは、コマンドと接続オブジェクトを破棄する必要があります。

+0

それはまだ同じです。毎回、挿入ボタンを押してからDbとのセッションを終了します。 –

+0

[con.Close()]を使用する代わりに、[con.Dispose()]を試してください – Developer

+0

Sir状況は挿入ボタンのヒットごとに同じですDBと接続しています。何か間違ったものElse –

関連する問題