[英]C# console application Invalid Operation Exception
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()
這樣做的正確方法應該是這樣的:
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連接。
另請檢查: 在MSDN上使用ADO.NET的最佳實踐
其他事項:使用SQL Management Studio並嘗試使用連接字符串中的sql身份驗證登錄憑據,如果使用該帳戶成功連接到數據庫,則上述代碼應該適合您。
最好的祝福
代碼應該讀取
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
...
}
嘗試添加此代碼。 您可能已打開連接,而在重新運行程序時,您嘗試再次打開連接,或者您遇到服務器或連接字符串問題
con.Close();
有關更多信息,請訪問http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.open.aspx
你可以在打開之前檢查連接狀態 :
SqlConnection con = new SqlConnection(connectionString);
if (con.State==ConnectionState.Closed)
{
con.Open();
}
// here your code goes for sql operations
con.Close();
嘗試使用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();
}
希望有幫助。
我遇到了同樣的問題,我在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秒,所以我不得不在我的WebService
WebConfig
中更改它:
<system.web>
<httpRuntime executionTimeout="600" /> <!--10 min-->
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.