2014-05-20 44 views
0

我有一個問題,下面的代碼,沒有任何編碼錯誤,但有時它會引發一些exceptions.I只是想知道任何代碼組織的問題? &如何解決它。DB連接問題只有一些時間

有時,它顯示了這些例外

1.ExecuteReader需要一個開放和可用的連接。連接的當前狀態已關閉。

2.關閉閱讀器時嘗試調用FieldCount無效。

但有時工作沒有任何問題,因爲預期

我的編碼這裏去

[WebMethod, ScriptMethod] 
public static List<HomeImageSliders> GetHomeImageSliders() 
{ 
    List<HomeImageSliders> HomeImageList = new List<HomeImageSliders>(); 
    try 
    { 
     SqlCommand comHomeImage = new SqlCommand("SP_GetHomeImageSliders", conDB); 
     comHomeImage.CommandType = CommandType.StoredProcedure; 
     if (conDB.State != ConnectionState.Open) 
     { 
      conDB.Open(); 
     } 

     SqlDataReader rdr = comHomeImage.ExecuteReader(); 
     DataTable dt = new DataTable(); 

      dt.Load(rdr); 
      foreach (DataRow r in dt.Rows) 
      { 
       HomeImageList.Add(new HomeImageSliders 
       { 
        Id = (int)r["Id"], 
        ImagePath = r["ImagePath"].ToString(), 
        ModifiedDate = Convert.ToDateTime(r["ModifiedDate"]).Date 

       }); 
      } 

    } 
    catch (Exception ee) 
    { 
    } 
    finally 
    { 
     conDB.Close(); 
    } 
    return HomeImageList; 
} 

回答

2

你應該使用 「使用」 的建設:

(using ommand comHomeImage = new SqlCommand("SP_GetHomeImageSliders", conDB) { 
    (using SqlDataReader rdr = new SqlDataReader) { 
     //do some things 
    } 

} 
+0

你應該算你的括號內。另外,SqlDataReader沒有定義的構造函數。 – LarsTech

+0

請檢查您的paranthesis.some錯誤在這裏 – TechGuy

2

我不不知道爲什麼當您撥打電話時您的連接有時會關閉

ExecuteReader() 

但是你爲什麼不使用using塊,而不是像這樣:

using(SqlConnection conDB = new SqlConnection(connectionString)) 
{ 
... 
} 

,當它失去範圍,這將關閉與數據庫的連接。

1

嘗試通過usinglock

防止使用同一個連接兩個或多個線程
lock(_conDb) 
{ 
    //// your code here 
} 

,也包裹你的conDb使用塊如下

using(SqlConnection conDB = new SqlConnection(connectionString)) 
{ 
... 
}