none
關於ExecuteNonQuery: Connection 屬性尚未初始化的問題 RRS feed

  • 問題

  • 請問各位大師,這段在執行時會出現ExecuteNonQuery: Connection 屬性尚未初始化的問題

    我看不出問題點,還望各位幫幫忙....謝謝

    string str1 = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=C:\\bbsxp2008.mdb";
                try
                  {
                      using (OleDbConnection conn = new OleDbConnection(str1))
                    {
                        OleDbTransaction transaction = null;
                        try
                        {
                            OleDbCommand Comm = new OleDbCommand();
                            Comm.Connection = conn;
                            conn.Open();
                            transaction = conn.BeginTransaction();
                            Comm.Transaction = transaction;

                            foreach (DataRow oRow in Ds.Tables["Detail"].Select("ISNULL(REPRN,'') = 'true' "))
                                {
                                    MessageBox.Show("aaa");
                                        Comm.CommandText = "delete * from BBSXP_Users WHERE  UserName=@UserName ";
                                        Comm.Parameters.Clear();
                                        Comm.Parameters.Add("@UserName", OleDbType.VarChar).Value = oRow["UserName"];
                                        Comm.ExecuteNonQuery();
                                        Comm.Dispose();
                                }

                            transaction.Commit();
                        }
                        catch (Exception ex)
                        {
                            transaction.Rollback();
                            MessageBox.Show("存入失敗,請解決問題後再次儲存 !!" + ex.Message.ToString(), "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        finally
                        {
                            conn.Close();
                            conn.Dispose();
                        }
                    }
                  }
                catch (IOException ex)
                {
                    MessageBox.Show(ex.Message, "錯誤提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

    2010年8月25日 上午 01:58

解答

  • 先把 Comm.Dispose() 移出 foreach 區塊吧...沒實際跑過,但你現行寫法在 foreach 迴圈第二次執行應該會發生錯誤 (因為 Comm 被釋放掉了)。

    附帶一提:你的程式似乎沒必要包兩層 try...catch。


    Hunterpo's IT Vision - http://www.dotblogs.com.tw/hunterpo/
    2010年8月25日 上午 03:04

所有回覆

  • 先把 Comm.Dispose() 移出 foreach 區塊吧...沒實際跑過,但你現行寫法在 foreach 迴圈第二次執行應該會發生錯誤 (因為 Comm 被釋放掉了)。

    附帶一提:你的程式似乎沒必要包兩層 try...catch。


    Hunterpo's IT Vision - http://www.dotblogs.com.tw/hunterpo/
    2010年8月25日 上午 03:04
  • HI,

     

    因為Dispose會釋放command所使用到的resource, 所以在Comm.Connection這個設定就會被釋放掉, 然後就會看到您說的那個訊息,

    建議您直接拿掉Comm.Dispose(); , 這部分交由GC來決定回收的時間.

     

     

     

    rgs,

    Lolota


    Tech.Days Taiwan 2010 即將於 9/28-9/30 隆重展開!我們很榮幸向您推薦此微軟年度重量級的技術盛會

    2010年8月25日 上午 03:20