2016-10-21 69 views
0

私は接続が閉じられませんでした。接続の現在の状態は開いています。エラー

接続が閉じられていなかったと私にエラーを与えているtry..catchブロック内のコードのセットを持っています。それはブロックをキャッチするために行くと述べたエラーをスローします

try 
    { 
     MainEnqMkey = InsertUpdateDelete.InsertUpdateDeleteCls.InsertUpdateDelete_oracle(HidMode.Value, Convert.ToInt32(HidMKey.Value), "XXCUS.XXACL_PN_AGRMNT_MST", "MKEY", "AM", sb.ToString()); 

     if (Request.QueryString["Mode"] != "M") 
     { 
      ObjPriCon.Open(); 
      OracleCommand ObjPriCmd_seq2 = new OracleCommand("select XXCUS.XXACL_PN_AGRMNT_MST_SEQ.nextval from dual", ObjPriCon); // generating ref no here. 
      string strRefNo = Convert.ToString(ObjPriCmd_seq2.ExecuteOracleScalar()); 

      Response.Write("<script language=javascript> alert('Your Document No is : " + strRefNo.ToString() + "')</script>"); 

      OracleCommand cmd2 = new OracleCommand("Update XXCUS.XXACL_PN_AGRMNT_MST set DOC_NO = '" + strRefNo.ToString() + "' where MKEY = '" + MainEnqMkey + "'", ObjPriCon); // Updating ref no here 

      OracleCommand cmd3 = new OracleCommand("Update xxcus.xxacl_pn_farming_mst set LAST_DOC_NO = '" + txtdocno.Value + "' where project_id = '" + ddlProject.SelectedValue + "' and VILLAGE = '" + ddlVillage.SelectedValue + "' and SURVEY_AREA_7_12 = '" + ddl712.SelectedValue + "' and LEGAL_ENTITY = '" + txtCompName.Value + "' " + 
                " and TALUKA = '" + ddlTaluka.SelectedValue + "'"); // updating doc as last doc no 

      cmd2.ExecuteNonQuery(); 

      cmd3.ExecuteNonQuery(); 
      ObjPriCon.Close(); 
     } 

     ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('Record Saved Successfully');window.location ='Frm_Agreement_Master.aspx?TranType=AM&PView=N&Mode=A&Redirect=oracle&Key=0&Redirect=" + Request.QueryString["Redirect"] + "&userid=" + Request.QueryString["userid"].ToString() + "';", true); 
    } 
    catch (Exception ex) 
    { 
     ex.Message.ToString(); 
    } 

ObjPriCon.Open();した後、接続の現在の状態が開かれています。

+2

をブロックし、その中で最後に書きます! – Charleh

答えて

2

代わりのオープン接続を開き、あなたはそれがあなたの接続状態を使用してのハック方法でこれを修正することができますが、一つの接続を共有するために良いことではありません

if (ObjPriCon.State != ConnectionState.Open) 
{ 
    ObjPriCon.Open(); 
} 
+0

となりましたが、「無効な操作です。接続が閉じられています。行 'cmd3.ExecuteNonQuery();' – BNN

+0

は別の問題です。 'ObjPriCon'を' cmd3'にパラメータとして追加するのを忘れました。 – fubo

+0

ありがとう。接続を追加した後で動作するようになりました – BNN

1

のような状態だ確認することができます。接続プールはあなたの友人です。だから、再コードを書くことができます。

using(OracleConnection conn = new OracleConnection("connectionString")) 
{ 
    conn.Open(); 
    //your code 
    //using block will automatically close your connection when you are done. 
} 

はまた、現在、あなたはSQLインジェクションに開放されています。使用は

OracleCommand cmd2 = new OracleCommand("Update XXCUS.XXACL_PN_AGRMNT_MST set DOC_NO = @Doc_No where MKEY [email protected] , conn); 

cmd2.Parameters.AddWithValue("@Doc_No", strRefNo.ToString()); 
cmd2.Parameters.AddWithValue("@Mkey", MainEnqMkey); 

cmd2.ExecuteNonQuery(); 

はあなたのクエリと同じ順序でそれらを定義する必要がありますので、OracleCommandのは、名前付きパラメータをサポートしていません注意してくださいクエリをparamatrized。

0

ObjPriCon.Close()が必要なことがあります。最終的にブロックに入れます。それがキャッチになると、それは閉じられていない可能性があります。あなたは、そのヒンジを、それをはぎ取るよ -

0

より良いあなたはそれがすでに開いている場合は、接続を開くことができませんObjPriCon.close()

try 
{ 
    ObjPriCon.Open(); 

}  
catch (Exception ex) 
{ 
    throw ex; 
} 
finally 
{ 
    ObjPriCon.close(); 
} 
+0

最後に接続していれば、接続を閉じる必要はありません。最後にブロックが常に実行されます。 – mybirthname

+0

uff ...はい、ありがとう!更新しました –

関連する問題