0

OSQL を介してコマンドを実行するときと、SQlConnection を使用してプログラムによるクエリを実行するときの SQL Server 2005 の動作の微妙な違いを知っている人はいますか?

OSQL を使用して対話できるリモート マシン上にデータベースを持つクライアントがあります。ただし、sqlconnection/sqlcommand を作成して同様のクエリを実行しようとすると、次のエラーが表示されます。

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

動作する OSQL コマンドは次のとおりです。

osql -S myHost\SQLEXPRESS -U sa -q "USE [TempDB] select [Endpoint] from [Service]"

これは機能しません。上記のエラーが生成されます。

SqlConnectionStringBuilder cnBldr = new SqlConnectionStringBuilder();

cnBldr.UserID = "sa";
cnBldr.Password  = "PASSWORD";
cnBldr.DataSource = "myHost\\SQLEXPRESS";
cnBldr.InitialCatalog = "TempDB";
using (SqlConnection cn = new SqlConnection(cnBldr.ConnectionString))

using (SqlCommand cmd = new SqlCommand("select [Endpoint] from [Service]",cn))
{
   cn.Open();
   SqlDataReader rdr = cmd.ExecuteReader();
   rdr.Read();
}

どちらの場合も、同じユーザーとして実行しています (つまり、Windows ユーザーとしてログインし、cmd ウィンドウを開いて OSQL コマンドを実行するか、上記のコード フラグメントを含む Windows アプリケーションを起動します。OSQL は機能します。 、コード フラグメントは上記のエラーを生成します。どちらの場合も、データベースへのアクセスに「sa」アカウントを使用します。OSQL フラグメントは、ユーザーにパスワードの入力を求めます。

この動作に起因する可能性のある2つの違いはありますか? これは、接続数の問題によるものではないと思います。osql コマンドの実行 (動作します) とアプリケーションの実行 (エラー メッセージが生成されます) を自由に切り替えることができるからです。

ご意見ありがとうございます。

-ジョン

4

2 に答える 2

2

最初に を使用しないでください。TempDB名前はtempdbであり、コードは大文字と小文字を区別するインスタンスで壊れます。

接続の問題については、 SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specifiedの手順に従ってください。OSQL は ODBC を使用し、SQLCommand にはマネージド SNI 実装が組み込まれているため、両者には違いがあり、マシンのグローバル構成設定が異なります。リンクされた記事の手順に従って、接続が途切れる場所を特定します。

于 2011-06-13T19:19:18.267 に答える
0

結局のところ、2 つのメカニズムに違いはありません。アプリケーションの起動方法が少し異なりました。この違い (具体的には、クエリが生成される前の名前解決) がエラー メッセージの原因でした。

この観点からは、osql/sqlcmd とプログラムによるクエリとの間に固有の違いはありません。

于 2011-06-14T18:28:42.453 に答える