2013-03-22 58 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(); 

    ... 
}