2013-03-22 110 views
4
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Data.Sql; 
using System.Data.SqlClient; 

namespace BissUpdater 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string connectionString = "Data Source=H....; 
       Initial Catalog=LANDesk; Persist Security Info=True; 
       User ID=Mainstc; Password=xxxxxxxx"; 

      SqlConnection con = new SqlConnection(connectionString); 
      con.Open(); 
     } 
    } 
} 

SQL連接拋出無效操作異常。C#控制檯應用程序無效操作異常

「操作無效,連接已關閉」。

這是我的完整代碼。在另一個程序中,它是完美的。

這是第二次,那不工作。我與VS2005工作...也許我的程序被損壞?

堆棧跟蹤:

在System.Data.SqlClient.SqlConnection.GetOpenConnection()
在 System.Data.SqlClient.SqlConnection.get_ServerVersion()

+0

您可以發佈完整的堆棧跟蹤,以明確在拋出異常? – 2013-03-22 09:04:21

+0

只需檢查您的SQL Server實例是否已啓動並正在運行。 – 2013-03-22 09:07:37

+0

更新堆棧跟蹤。數據庫正在工作。 – mnlfischer 2013-03-22 09:09:54

回答

10

正確的方法做的,應該是這樣的:

static void Main(string[] args) { 
    string connectionString = "Data Source=H....; 
    Initial Catalog=LANDesk;User ID=Mainstc; Password=xxxxxxxx"; 
    // removed Persist Security Info=True; 


    using(SqlConnection con = new SqlConnection(connectionString)) 
    { 
     if (con.State==ConnectionState.Closed) 
     {      
      con.Open(); 
     } 
    } 


} 

使用Using Statement它會自動處理您的SQL連接。

入住這也:Best Practices for Using ADO.NET on MSDN

其他的事情要做:使用SQL Management Studio中,並嘗試使用SQL身份驗證的登錄憑據從您的連接字符串,如果你有使用該帳戶上面的代碼成功連接到數據庫應該爲你工作。

問候

+1

我同意,由於使用聲明,此代碼更好,但我認爲這不會解決問題。 – Max 2013-03-22 09:11:57

+0

現在,我得到相同的異常,但是當執行con.open()語句時,連接處於打開狀態,並且sql連接顯示狀態爲「打開」。它的作品,但...爲什麼我首先例外:O ... – mnlfischer 2013-03-22 09:44:05

0

你可以打開ittry此之前檢查connection state

SqlConnection con = new SqlConnection(connectionString); 
if (con.State==ConnectionState.Closed) 
{      
    con.Open(); 
} 

// here your code goes for sql operations 

con.Close(); 
0

嘗試使用using聲明。在大型數據庫的情況下直接手動打開和關閉數據庫是個壞主意。

using(SqlConnection con = new SqlConnection(connectionString)) 

嘗試做這樣的開放和關閉連接>>

public DB(string conStr):base() 
{ 
con = new OracleConnection(conStr); 
con.Open(); 
} 


public void Close() 
{ 
con.Close(); 
//con.Dispose(); 

} 

希望有用。

0

該代碼應閱讀

using (SqlConnection con = new SqlConnection(connectionString)) 
{ 
    con.Open(); 

    ... 
}