簡體   English   中英

C#控制台應用程序無效的操作異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM