SQL Server 管理オブジェクト (SMO) アプリケーションの最初のプログラミング手順は、 Server オブジェクトのインスタンスを作成し、Microsoft SQL Server のインスタンスへの接続を確立することです。
Server オブジェクトのインスタンスを作成し、3 つの方法で SQL Server のインスタンスへの接続を確立できます。 1 つ目は、 ServerConnection オブジェクト変数を使用して接続情報を提供することです。 2 つ目は、 Server オブジェクトのプロパティを明示的に設定して接続情報を提供することです。 3 つ目は、 Server オブジェクト コンストラクターで SQL Server インスタンスの名前を渡すことです。
ServerConnection オブジェクトの使用
ServerConnectionオブジェクト変数を使用する利点は、接続情報を再利用できることです。 Serverオブジェクト変数を宣言します。 次に、 ServerConnection オブジェクトを宣言し、SQL Server のインスタンスの名前や認証モードなどの接続情報を使用してプロパティを設定します。 次に、 ServerConnection オブジェクト変数をパラメーターとして Server オブジェクト コンストラクターに渡します。 異なるサーバー オブジェクト間で同時に接続を共有することはお勧めしません。 Copyメソッドを使用して、既存の接続設定のコピーを取得します。
サーバー オブジェクトのプロパティを明示的に設定する
または、 Server オブジェクト変数を宣言し、既定のコンストラクターを呼び出すこともできます。 同様に、 Server オブジェクトは、すべての既定の接続設定を使用して SQL Server の既定のインスタンスに接続しようとします。
サーバー オブジェクト コンストラクターで SQL Server インスタンス名を指定する
Server オブジェクト変数を宣言し、SQL Server インスタンス名をコンストラクターの文字列パラメーターとして渡します。 Server オブジェクトは、既定の接続設定で SQL Server のインスタンスとの接続を確立します。
接続のプール
通常、ServerConnection オブジェクトの Connect メソッドを呼び出す必要はありません。 SMO は、必要に応じて自動的に接続を確立し、操作の実行が完了した後に接続プールへの接続を解放します。 Connect メソッドが呼び出されると、接続はプールに解放されません。 プールへの接続を解放するには、 Disconnect メソッドの明示的な呼び出しが必要です。 さらに、ServerConnection オブジェクトの NonPooledConnection プロパティを設定することで、プールされていない接続を要求できます。
マルチスレッド アプリケーション
マルチスレッド化されたアプリケーションの場合、各スレッドで別々の ServerConnection オブジェクトを使用します。
SQL Server for RMO のインスタンスへの接続
レプリケーション管理オブジェクト (RMO) では、SMO とは若干異なる方法を使用してレプリケーション サーバーに接続します。
RMO プログラミング オブジェクトでは、Microsoft.SqlServer.Management.Common
名前空間によって実装されたServerConnection オブジェクトを使用して、SQL Server のインスタンスへの接続を確立する必要があります。 サーバーへのこの接続は、RMO プログラミング オブジェクトとは独立して行われます。 その後、インスタンスの作成時またはオブジェクトの ConnectionContext プロパティへの割り当てによって、RMO オブジェクトに渡されます。 この方法では、RMO プログラミング オブジェクトおよび接続オブジェクト インスタンスを別々に作成および管理することが可能となり、単一の接続オブジェクトを複数の RMO プログラミング オブジェクトと共に再利用することができます。 レプリケーション サーバーへの接続には、次の規則が適用されます。
接続のすべてのプロパティは、指定した ServerConnection オブジェクトに対して定義されます。
SQL Server のインスタンスへの各接続には、独自の ServerConnection オブジェクトが必要です。
接続を作成し、サーバーに正常にログオンするための認証情報はすべて ServerConnection オブジェクトで指定されます。
既定では、接続は Microsoft Windows 認証を使用して行われます。 SQL Server 認証を使用するには、 LoginSecure を False に設定し、 Login し、 Password 有効な SQL Server ログオンとパスワードを設定する必要があります。 セキュリティ資格情報は、常に安全に保存および処理され、可能な限り実行時に提供される必要があります。
RMO プログラミング オブジェクトへの接続を渡す前に、 Connect メソッドを呼び出す必要があります。
例示
提供されているコード例を使用するには、プログラミング環境、プログラミング テンプレート、およびアプリケーションを作成するプログラミング言語を選択する必要があります。 詳細については、SQL Server オンライン ブックの「方法: Visual Studio .NET で Visual Basic SMO プロジェクトを作成する」または「方法: Visual Studio .NET で Visual C# SMO プロジェクトを作成する」を参照してください。
Visual Basic で Windows 認証を使用して SQL Server のローカル インスタンスに接続する
SQL Server のローカル インスタンスに接続する場合、多くのコードは必要ありません。 代わりに、認証方法とサーバーの既定の設定に依存します。 データを取得する必要がある最初の操作では、接続が作成されます。
この例は、Windows 認証を使用して SQL Server のローカル インスタンスに接続する Visual Basic .NET コードです。
Visual C で Windows 認証を使用して SQL Server のローカル インスタンスに接続する#
SQL Server のローカル インスタンスに接続する場合、多くのコードは必要ありません。 代わりに、認証方法とサーバーの既定の設定に依存します。 データを取得する必要がある最初の操作では、接続が作成されます。
この例は、Windows 認証を使用して SQL Server のローカル インスタンスに接続する Visual C# .NET コードです。
{
//Connect to the local, default instance of SQL Server.
Server srv;
srv = new Server();
//The connection is established when a property is requested.
Console.WriteLine(srv.Information.Version);
}
//The connection is automatically disconnected when the Server variable goes out of scope.
Visual Basic で Windows 認証を使用して SQL Server のリモート インスタンスに接続する
Windows 認証を使用して SQL Server のインスタンスに接続する場合、認証の種類を指定する必要はありません。 既定は Windows 認証です。
この例は、Windows 認証を使用して SQL Server のリモート インスタンスに接続する Visual Basic .NET コードです。 文字列変数 strServer には、リモート インスタンスの名前が含まれています。
Visual C で Windows 認証を使用して SQL Server のリモート インスタンスに接続する#
Windows 認証を使用して SQL Server のインスタンスに接続する場合、認証の種類を指定する必要はありません。 既定は Windows 認証です。
この例は、Windows 認証を使用して SQL Server のリモート インスタンスに接続する Visual C# .NET コードです。 文字列変数 strServer には、リモート インスタンスの名前が含まれています。
{
//Connect to a remote instance of SQL Server.
Server srv;
//The strServer string variable contains the name of a remote instance of SQL Server.
srv = new Server(strServer);
//The actual connection is made when a property is retrieved.
Console.WriteLine(srv.Information.Version);
}
//The connection is automatically disconnected when the Server variable goes out of scope.
Visual Basic で SQL Server 認証を使用して SQL Server のインスタンスに接続する
SQL Server 認証を使用して SQL Server のインスタンスに接続する場合は、認証の種類を指定する必要があります。 この例では、接続情報を再利用できるようにする、 ServerConnection オブジェクト変数を宣言する別の方法を示します。
この例は、リモートに接続する方法を示す Visual Basic .NET コードで、 vPassword にはログオンとパスワードが含まれています。
' compile with:
' /r:Microsoft.SqlServer.Smo.dll
' /r:Microsoft.SqlServer.ConnectionInfo.dll
' /r:Microsoft.SqlServer.Management.Sdk.Sfc.dll
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Common
Public Class A
Public Shared Sub Main()
Dim sqlServerLogin As [String] = "user_id"
Dim password As [String] = "pwd"
Dim instanceName As [String] = "instance_name"
Dim remoteSvrName As [String] = "remote_server_name"
' Connecting to an instance of SQL Server using SQL Server Authentication
Dim srv1 As New Server() ' connects to default instance
srv1.ConnectionContext.LoginSecure = False ' set to true for Windows Authentication
srv1.ConnectionContext.Login = sqlServerLogin
srv1.ConnectionContext.Password = password
Console.WriteLine(srv1.Information.Version) ' connection is established
' Connecting to a named instance of SQL Server with SQL Server Authentication using ServerConnection
Dim srvConn As New ServerConnection()
srvConn.ServerInstance = ".\" & instanceName ' connects to named instance
srvConn.LoginSecure = False ' set to true for Windows Authentication
srvConn.Login = sqlServerLogin
srvConn.Password = password
Dim srv2 As New Server(srvConn)
Console.WriteLine(srv2.Information.Version) ' connection is established
' For remote connection, remote server name / ServerInstance needs to be specified
Dim srvConn2 As New ServerConnection(remoteSvrName)
srvConn2.LoginSecure = False
srvConn2.Login = sqlServerLogin
srvConn2.Password = password
Dim srv3 As New Server(srvConn2)
Console.WriteLine(srv3.Information.Version) ' connection is established
End Sub
End Class
Visual C で SQL Server 認証を使用して SQL Server のインスタンスに接続する#
SQL Server 認証を使用して SQL Server のインスタンスに接続する場合は、認証の種類を指定する必要があります。 この例では、接続情報を再利用できるようにする、 ServerConnection オブジェクト変数を宣言する別の方法を示します。
この例は、リモートに接続する方法を示す Visual C# .NET コードで、 vPassword にはログオンとパスワードが含まれています。
// compile with:
// /r:Microsoft.SqlServer.Smo.dll
// /r:Microsoft.SqlServer.ConnectionInfo.dll
// /r:Microsoft.SqlServer.Management.Sdk.Sfc.dll
using System;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
public class A {
public static void Main() {
String sqlServerLogin = "user_id";
String password = "pwd";
String instanceName = "instance_name";
String remoteSvrName = "remote_server_name";
// Connecting to an instance of SQL Server using SQL Server Authentication
Server srv1 = new Server(); // connects to default instance
srv1.ConnectionContext.LoginSecure = false; // set to true for Windows Authentication
srv1.ConnectionContext.Login = sqlServerLogin;
srv1.ConnectionContext.Password = password;
Console.WriteLine(srv1.Information.Version); // connection is established
// Connecting to a named instance of SQL Server with SQL Server Authentication using ServerConnection
ServerConnection srvConn = new ServerConnection();
srvConn.ServerInstance = @".\" + instanceName; // connects to named instance
srvConn.LoginSecure = false; // set to true for Windows Authentication
srvConn.Login = sqlServerLogin;
srvConn.Password = password;
Server srv2 = new Server(srvConn);
Console.WriteLine(srv2.Information.Version); // connection is established
// For remote connection, remote server name / ServerInstance needs to be specified
ServerConnection srvConn2 = new ServerConnection(remoteSvrName);
srvConn2.LoginSecure = false;
srvConn2.Login = sqlServerLogin;
srvConn2.Password = password;
Server srv3 = new Server(srvConn2);
Console.WriteLine(srv3.Information.Version); // connection is established
}
}