Соединение с экземпляром SQL Server
Первым шагом в программировании приложения SQL Server Management Objects (SMO) является создание экземпляра объекта Server и установление его соединения с экземпляром Microsoft SQL Server.
Создать экземпляр Server и установить соединение с экземпляром SQL Server можно тремя способами. Первый способ — использовать переменную объекта ServerConnection для задания информации о соединении. Второй способ — задать информацию о соединении в явном виде, присвоив соответствующие значения свойствам объекта Server. Третий способ — передать имя экземпляра SQL Server в конструктор объекта Server.
Использование объекта ServerConnection
Преимущество использования переменной объекта ServerConnection в том, что заданную информацию о соединении можно применять многократно. Объявите переменную объекта Server. Затем объявите объект ServerConnection и задайте для его свойств значения информации соединения, такие как имя экземпляра SQL Server и режим проверки подлинности. Затем передайте переменную объекта ServerConnection в качестве параметра конструктору объекта Server. Не рекомендуется использование одного соединения несколькими серверными объектами одновременно. Чтобы получить копию настроек существующего соединения, вызовите метод Copy.
Настройка свойств серверного объекта в явном виде
Другая возможность — объявить переменную объекта Server и вызвать конструктор по умолчанию. Объект Server попытается соединиться с экземпляром по умолчанию SQL Server, используя все настройки соединения по умолчанию.
Передача имени экземпляра SQL Server в конструктор объекта Server
Объявите переменную объекта Server и передайте имя экземпляра SQL Server в качестве строкового параметра конструктору объекта. Объект Server установит соединение с экземпляром SQL Server, используя значения настроек по умолчанию.
Организация пулов соединений
Вызов метода Connect объекта ServerConnection обычно не требуется. SMO автоматически установит соединение, когда это потребуется, и освободит его, передав в пул соединений, после завершения операций. При вызове метода Connect соединение не передается в пул. Для освобождения соединения и его передачи в пул нужен явный вызов метода Disconnect. Кроме этого, можно запросить соединение не из пула, установив свойство NonPooledConnection объекта ServerConnection.
Многопоточные приложения
Для многопоточных приложений в каждом потоке должен использоваться отдельный объект ServerConnection.
Соединение с экземпляром SQL Server для RMO
Объекты RMO используют несколько отличный от SMO подход для соединения с сервером репликации.
Программные объекты RMO требуют, чтобы соединение с экземпляром SQL Server производилось с помощью объекта ServerConnection, реализованного в пространстве имен Microsoft.SqlServer.Management.Common. Это соединение с сервером производится независимо от программного объекта RMO. Затем оно передается объекту RMO либо во время создания экземпляра, либо присвоением его свойству ConnectionContext объекта. Это позволяет создать экземпляр объекта программирования RMO независимо от объекта соединения и разделить задачи их управления. Один объект соединения можно использовать с несколькими объектами программирования RMO. Для соединений с сервером репликации действуют следующие правила.
Все свойства соединения определяются для конкретного объекта ServerConnection.
Каждое соединение с экземпляром SQL Server должно иметь свой собственный объект ServerConnection.
Все данные проверки подлинности, необходимые для установления соединения и входа на сервер, передаются в объекте ServerConnection.
По умолчанию соединения устанавливаются с использованием проверки подлинности Windows. Для использования проверки подлинности SQL Server свойство LoginSecure должно иметь значение False, а свойства Login и Password должны содержать в качестве значений действующие имя пользователя и пароль SQL Server. Учетные данные безопасности нужно всегда защищать от возможного несанкционированного доступа и по возможности вводить только во время выполнения.
До передачи соединения любому объекту программирования RMO следует вызвать метод Connect.
Примеры
Чтобы использовать какой-либо из представленных примеров кода, необходимо выбрать среду, шаблон и язык программирования, с помощью которых будет создаваться приложение. Дополнительные сведения см. в разделе «Как создать проект Visual Basic SMO в Visual Studio .NET» или «Как создать проект Visual C# SMO в Visual Studio .NET» в электронной документации по SQL Server.
Соединение с локальным экземпляром SQL Server с использованием проверки подлинности Windows на языке Visual Basic
Для соединения с локальным экземпляром SQL Server не нужно писать много программного кода. Вместо этого для метода проверки подлинности и сервера используются настройки по умолчанию. Первая операция, требующая получения данных, вызовет создание соединения.
Этот пример представляет собой программный код для платформы Visual Basic .NET, который производит подключение к местному экземпляру SQL Server с использованием проверки подлинности Windows.
'Connect to the local, default instance of SQL Server.
Dim srv As Server
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.
Соединение с локальным экземпляром SQL Server с использованием проверки подлинности Windows на языке Visual C#
Для соединения с локальным экземпляром SQL Server не нужно писать много программного кода. Вместо этого для метода проверки подлинности и сервера используются настройки по умолчанию. Первая операция, требующая получения данных, вызовет создание соединения.
Этот пример представляет собой программный код на языке Visual C# .NET, который производит подключение к локальному экземпляру SQL Server с использованием проверки подлинности Windows.
{
//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.
Соединение с удаленным экземпляром SQL Server с использованием проверки подлинности Windows на языке Visual Basic
При подключении к экземпляру SQL Server с использованием проверки подлинности Windows указывать тип проверки не нужно. По умолчанию используется проверка подлинности Windows.
Этот пример представляет собой программный код для платформы Visual Basic .NET, который производит подключение к удаленному экземпляру SQL Server с использованием проверки подлинности Windows. Строковая переменная strServer содержит имя удаленного экземпляра.
'Connect to a remote instance of SQL Server.
Dim srv As Server
'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.
Соединение с удаленным экземпляром SQL Server с использованием проверки подлинности Windows на языке Visual C#
При подключении к экземпляру SQL Server с использованием проверки подлинности Windows указывать тип проверки не нужно. По умолчанию используется проверка подлинности Windows.
Этот пример представляет собой программный код на языке Visual C# .NET, который производит подключение к удаленному экземпляру SQL Server с использованием проверки подлинности Windows. Строковая переменная 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.
Соединение с экземпляром SQL Server с использованием проверки подлинности SQL Server на языке Visual Basic
При подключении к экземпляру 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
Соединение с экземпляром SQL Server с использованием проверки подлинности SQL Server на языке Visual C#
При подключении к экземпляру 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
}
}