6

マシンの 1 つに 2008 SQL Server Express がインストールされており、リモート接続を確立しようとしています... MS SQL Server Management Studio を使用すると、まったく問題なくデータベースにログインできます (同じ資格情報)、しかし、C# アプリケーションで接続文字列を作成しようとすると、例外が発生します。

SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。

接続文字列は次のようになります (個人情報は変更されています)。

"Data Source="MACHINENAME\\SQLEXPRESS";User ID="Admin";Password="the_password";Initial Catalog="MyDatabase";Integrated Security=True;Connect Timeout=120");

前述のとおり、Management Studio を使用して同じ設定(同じユーザー ID、パスワード、データ ソース名) でログインできますが、上記の接続文字列で接続を開こうとすると失敗します。

ノート:

  1. サーバーでリモート接続を有効にし、ファイアウォールを無効にし、サーバーへの TCP/IP 接続を有効にし、SQL ブラウザーを有効にしました。

  2. 同じマシン上にいる場合、接続文字列は正常に機能します。

  3. Integrated Security オプションを調べて、Windows ログインを使用しようとしていないことを確認するために false に設定しましたが、それでも失敗します。

  4. データベースは、Windows ログインとデータベース ログインの両方を許可するように設定されています。

  5. Integrated Security オプションを SSPI、True、最後に False に変更すると、3 つすべてで上記と同じエラーが発生しました。

私が何か間違ったことをしているかどうか、誰かに教えてもらえますか?

更新、これが私の正確なコードです(今回はパスワードのみが削除され、同じマシンで実行されている管理スタジオの写真を追加しました):

string _connectionString =
            //string.Format("Server=%s;User ID=%s;Password=%s;Database=%s;Connect Timeout=120", // Same problem
            //string.Format("Server=%s;User ID=%s;Password=%s;Database=%s;Integrated Security=False;Connect Timeout=120", // Same problem
            string.Format("Data Source=%s;User ID=%s;Password=%s;Initial Catalog=%s;Integrated Security=False;Connect Timeout=120", // Same problem
            "GANTCHEVI\\SQLEXPRESS",
            "FinchAdmin",
            "the_password",
            "Finch");

Management Studio 経由で接続: 写真を参照 http://s113.photobucket.com/albums/n202/ozpowermo/?action=view¤t=ManagementStudio.jpg

http://s113.photobucket.com/albums/n202/ozpowermo/?action=view¤t=ManagementStudio.jpg

私はそれを考え出した:

"Data Source=" ラベルを使用する場合は、"User Id" を使用する必要がありますが、User ID を使用すると機能しないようです!

string _connectionString = "Data Source=GANTCHEVI\\SQLEXPRESS;Initial Catalog=Finch;Integrated Security=False;User Id=FinchAdmin;Password=the_password;Connect Timeout=0";"
4

5 に答える 5

12

接続文字列から Integrated Security=True を削除し、(オプション) Persist Security Info=True; を追加します。

MSDN から:

Integrated Security - false の場合、接続でユーザー ID とパスワードが指定されます。true の場合、現在の Windows アカウントの資格情報が認証に使用されます。

于 2009-06-15T17:01:36.653 に答える
2

これを試して

string sqlcon=("Data Source="your pc name\\SQLEXPRESS"; 
UserID=sa;
Password=****;
Initial Catalog="+MyDatabase+"; 
IntegratedSecurity=True;");
于 2012-08-19T07:56:20.183 に答える
1

SQL インスタンスが着信 TCP 接続を受け入れるように構成されていない可能性があります。これは、[スタート] -> [SQL Server 2008] -> [構成ツール] -> [SQL Server 構成マネージャー] で確認できます。そのツールの左側にネットワーク構成が表示されます。それを展開して、有効になっているプロトコルを確認します。

于 2009-06-15T17:11:43.173 に答える
1

わかりました-これらすべてを試したと思いますhttp://blogs.msdn.com/sqlexpress/archive/2005/05/05/415084.aspx

MACHINENAME\SQLEXPRESS で sqlping を試しましたか

MACHINENAME に ping を実行できますか

最後に、MACHINENAME\SQLEXPRESS のように 1 つのスラッシュのみが必要であると確信しています。

于 2009-06-15T17:05:04.233 に答える
0

Integrated Security=SSPI を使用するとどうなりますか?

Windows ログインを使用したくない場合は、統合セキュリティ パラメータの削除に関する他の回答が正しいと思います。

于 2009-06-15T16:58:33.033 に答える