2016-05-29 76 views
-1

我有網站有很多的請求和我的數據庫連接類有問題 在連接到數據庫時請求程序時,另一個請求來和系統錯誤。 我的課就在這裏程序連接到我的網站的SQL服務器與很多請求

cmd=new SqlCommand(); 
    con=new SqlConnection(); 
    SqlCommand cmdLog = new SqlCommand(); 
    string cns = ""; 
    if(MABP.GetdomainUrl()=="localhost") 
    { 
     cns=ConfigurationManager.ConnectionStrings["ConnectionStringClient"].ToString(); 
    } else 
    { 
     cns=ConfigurationManager.ConnectionStrings["ConnectionStringServer"].ToString(); 
    } 
    con.ConnectionString=cns; 
    cmd.Connection=con; 
    cmdLog.Connection=con; 
    try 
    { 
     cmd.CommandText = Query; 
     DataTable dt = new DataTable(); 
     SqlDataAdapter da = new SqlDataAdapter(); 
     da.SelectCommand=cmd; 
     while(con.State==ConnectionState.Connecting) 
     { 
     } 
     if(ConnectionState.Open!=con.State) 
     { 
      con.Open(); 
     } 
     da.Fill(dt); 
     while(con.State==ConnectionState.Connecting) 
     { 
     } 
     if(ConnectionState.Closed!=con.State) 
     { 
      con.Close(); 
     } 
     con.Dispose(); 
     cmd.Dispose(); 
     return dt; 
    } catch(Exception e) 
    { 
     return null; 
    } 

我希望你能幫助我

+0

,你可以把你所得到的錯誤訊息?例如 –

+0

**連接未關閉。連接的當前狀態正在連接。執行GetConfigurationItem 3 ** – mpourbafrani

+0

'SqlDataAdapter.Fill'打開連接,如果它關閉,執行並關閉它。如果它是開放的,請執行並保持打開狀態。 – shadow

回答

1

試試這個:

  string sql = "select ...."; 
      string whereToConnect = MABP.GetdomainUrl()=="localhost" ? "ConnectionStringClient" : "ConnectionStringServer"; 
      string connectionString = ConfigurationManager.ConnectionStrings[whereToConnect].ToString(); 
      var dt = new DataTable(); 

      using (var connection = new SqlConnection(connectionString)) 
      { 
       using (var adapter = new SqlDataAdapter(sql, connection)) 
       { 
        try 
        { 
         adapter.Fill(dt); 
        } 
        catch 
        { 
         // Deal with exceprion if you want 
        } 
       } 
      } 

      return dt; 
+0

有些地方因爲安全原因我讀的時候應該關閉連接 是這樣嗎? – mpourbafrani

+0

@mpourbafrani最好關閉不消耗資源的連接。使用'使用'連接將被關閉並在超出範圍時處理。閱讀關於[DbDataAdapter.Fill方法](https://msdn.microsoft.com/en-us/library/905keexk%28v=vs.110%29.aspx)的模式。特別是**備註**部分。 – shadow

+0

謝謝我的朋友,我做過這件事,但我仍然有問題 – mpourbafrani