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()
答案 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