11
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 接続が無効な操作の例外をスローしました。

「無効な操作です。接続は閉じられています」。

これは私の完全なコードです。他のプログラムでは、完璧に機能します。

それは2回目です、それはうまくいきません。VS2005 を使用しています...プログラムが破損している可能性がありますか?

スタックトレース:

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

4

6 に答える 6

17

それを行う正しい方法は次のようになります。

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 認証ログイン資格情報を使用してみてください。そのアカウントを使用してデータベースに正常に接続されている場合は、上記のコードが機能するはずです。

よろしくお願いします

于 2013-03-22T09:03:36.940 に答える
2

コードは次のようになります。

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

    ...
}
于 2013-03-22T09:03:58.833 に答える
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();

} 

お役に立てば幸いです。

于 2013-03-22T09:03:37.227 に答える
0

このコードを追加してみてください。おそらく接続が開いていて、プログラムの再実行中に接続を再度開こうとするか、サーバーまたは接続文字列に問題があります

con.Close();

詳細については、http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.open.aspxを参照してください。

于 2013-03-22T09:02:46.493 に答える
0

you can check connection state before opening ittry this :

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

// here your code goes for sql operations

con.Close();
于 2013-03-22T09:03:21.950 に答える