3

C# を使用してサーバー上の DB に接続しようとしていますが、うまくいきません。

私はこれを使ってみました:

public static string m_ConnectionString =
    @"Network Library=dbmssocn; Data Source=*server ip*,*port*; database=*db name*; " +
    @"User id=*db username*; Password=*db pass*;";
public static SqlConnection myConnection = new SqlConnection(m_ConnectionString);

次のエラーが表示されます。

接続タイムアウトの期限が切れました。ログイン前のハンドシェイク確認応答を消費しようとしてタイムアウト時間が経過しました。これは、ログイン前のハンドシェイクが失敗したか、サーバーが時間内に応答できなかったことが原因である可能性があります。このサーバーへの接続試行にかかった時間は - [Pre-Login] initialization=9343; 握手=5654;

私が使ったときmyConnection.Open();

タイムアウトも設定しようとしましint.MaxValueたが、うまくいきませんでした。

4

2 に答える 2

14

SQL Server (および他の多くの) 接続文字列の非常に優れたソースはhttp://www.connectionstrings.com/sql-server/です。ODBC、OLE DB、または Native Client のいずれを介して接続しているかに応じて、別の接続文字列を選択する必要があります。

試す

Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;

また

Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;

正確な SQL Server のバージョン、セキュリティの種類などに応じて、選択できるオプションが多数あります。


アップデート

まず、データ アクセス テクノロジを選択する必要があります。

  • .NET Framework Data Provider for SQL Server ( SqlConnection) は、.NET コードから SQL Server にアクセスするための推奨される方法です。(比較のために SQL Native Client を使用する場合を参照してください)

  • Native Client : SQL Server にアクセスするための非常に高速な方法であり、SQL Server TDS プロトコルに直接アクセスし、非 .NET コードで動作するため、新機能をサポートします。.NET 以外のコードに適しています。

  • ODBC : 比較的高速で、さまざまなデータベースと互換性があります。データベースのタイプが将来変更される可能性がある場合、または「特殊な」データベースにアクセスしている場合は、これを選択してください。

  • OLEDB : SQL Server の場合は比較的遅く、Microsoft によって減価償却されます。

次に、 SQL Server 認証(ユーザー/パスワード) とWindows 認証のどちらかを選択する必要があります。できれば後者を選びます。Windows 認証を使用すると、SQL サーバーは、Windows に正常にログインした場合、信頼できるユーザーであると想定します。次に、Windows ユーザー名が 1 対 1 で SQL-Server ユーザーにマップされます。もちろん、このユーザーには、SQL Server で実行する操作 (SELECT、INSERT、UPDATE、DELETE など) に対して要求された権限が付与されている必要があります。DBA が Windows 認証をインストールしなかった場合は、uid/pwd を使用する必要があります。

これは私のために働いた:

string connectionString =
    "Data Source=192.168.123.45;Initial Catalog=MyDatabase;Integrated Security=SSPI;";
using (SqlConnection connection = new SqlConnection(connectionString)) {
    using (SqlCommand command = new SqlCommand(
                 "SELECT Region FROM dbo.tlkpRegion WHERE RegionID=30", connection)) {
        connection.Open();
        string result = (string)command.ExecuteScalar();
        MessageBox.Show("Region = " + result);
    }
}
于 2013-09-01T20:06:56.953 に答える
2

に置き換えて、そうあるData Source=*server ip*,*port*;べきだと思います。ただし、ポートが特定されていない場合は、本当に必要ないと思います。また、ドライバーを定義していません。これがないと機能するかわかりません。Data Source=*server ip*:*port*;,:

また、アドバイス: 検索LINQ to SQLまたはADO.NET Entity Data Model. これらはデータベースの使用を非常に簡素化でき、LINQ を使用すると、SQL によく似たコード内にクエリを記述でき、Visual Studio はインテリセンスにも役立つため、すべてのテーブルと列の名前を覚えておく必要はありません。

于 2013-09-01T20:10:32.357 に答える