C#控制台应用程序无效的操作异常

时间:2013-03-22 08:57:41

标签: c# sql-server console invalidoperationexception

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 Connection引发了无效的操作异常。

  

“操作无效。连接已关闭”。

这是我的完整代码。在另一个程序中,它完美无缺。

这是第二次,这不起作用。我正在使用VS2005 ...也许我的程序已损坏?

堆栈跟踪:

  

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

6 个答案:

答案 0 :(得分:14)

这样做的正确方法应该是:

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 :(得分:0)

尝试添加此代码。您可能已打开连接,并且在重新运行程序时尝试再次打开连接,或者您遇到服务器或连接字符串问题

con.Close();

查看更多信息http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.open.aspx

答案 2 :(得分:0)

你可以在打开它之前检查connection state

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

// here your code goes for sql operations

con.Close();

答案 3 :(得分: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();

} 

希望有帮助。

答案 4 :(得分:0)

代码应该是

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

    ...
}

答案 5 :(得分:0)

我遇到了同样的问题,我在VB中的解决方案是:

Dim db As New Database

' ... Some Work with EF without procedures (90 seconds)

db.SaveChanges()

For Each p In list

    If db.Database.Connection.State <> ConnectionState.Open Then
        ' This is only executed 1 time
        db.Database.Connection.Open()
    End If

    ' ... Some Work with EF but calling a mapped procedure (1 or 2 seconds each call)
    db.MyProcedure(p.FieldId)

Next

db.Dispose()

但是总时间为200秒,因此我必须在WebConfig的{​​{1}}中进行更改:

WebService