Connessione a un'istanza di SQL Server
La prima fase di programmazione in un'applicazione SMO (SQL Server Management Objects) consiste nel creare un'istanza dell'oggetto Server e nello stabilire la connessione a un'istanza di Microsoft SQL Server.
È possibile creare un'istanza dell'oggetto Server e stabilire una connessione all'istanza di SQL Server in tre modi diversi. Il primo metodo consiste nell'utilizzare una variabile oggetto ServerConnection per fornire le informazioni di connessione. Il secondo consiste nel fornire le informazioni di connessione impostando in modo esplicito le proprietà dell'oggetto Server. Il terzo consiste infine nel passare il nome dell'istanza di SQL Server nel costruttore dell'oggetto Server.
Utilizzo di un oggetto ServerConnection
Il vantaggio dell'utilizzo della variabile oggetto ServerConnection è costituito dal fatto che consente di riutilizzare le informazioni di connessione. Dichiarare una variabile oggetto Server. Dichiarare quindi un oggetto ServerConnection e impostare proprietà con le informazioni di connessione, quali il nome dell'istanza di SQL Server e la modalità di autenticazione. Passare quindi la variabile oggetto ServerConnection come parametro al costruttore dell'oggetto Server. Non è consigliabile condividere connessioni tra diversi oggetti server contemporaneamente. Utilizzare il metodo Copy per ottenere una copia delle impostazioni di connessione esistenti.
Impostazione esplicita delle proprietà dell'oggetto server
In alternativa, è possibile dichiarare la variabile oggetto Server e chiamare il costruttore predefinito. In questo modo, l'oggetto Server tenta di connettersi all'istanza predefinita di SQL Server con tutte le impostazioni di connessione predefinite.
Definizione del nome dell'istanza di SQL Server nel costruttore dell'oggetto server
Dichiarare la variabile oggetto Server e passare il nome dell'istanza di SQL Server come parametro di stringa nel costruttore. L'oggetto Server stabilisce una connessione con l'istanza di SQL Server con le impostazioni di connessione predefinite.
Pool di connessioni
Non è in genere necessario chiamare il metodo Connect dell'oggetto ServerConnection. SMO stabilirà automaticamente una connessione laddove necessario e rilascerà la connessione al pool di connessioni dopo avere completato l'esecuzione delle operazioni. Quando viene chiamato il metodo Connect, la connessione non viene rilasciata al pool. È necessaria una chiamata esplicita al metodo Disconnect per rilasciare la connessione al pool. È inoltre possibile richiedere una connessione non in pool impostando la proprietà NonPooledConnection dell'oggetto ServerConnection.
Applicazioni a thread multipli
Per le applicazioni multithreading, in ogni thread è necessario utilizzare un oggetto ServerConnection separato.
Connessione a un'istanza di SQL Server per RMO
RMO (Replication Management Objects) utilizza un metodo leggermente diverso da SMO per connettersi a un server di replica.
Gli oggetti di programmazione RMO richiedono l'esecuzione di una connessione a un'istanza di SQL Server tramite l'oggetto ServerConnection implementato dallo spazio dei nomi Microsoft.SqlServer.Management.Common. Questa connessione al server viene stabilita indipendentemente da un oggetto di programmazione RMO. La connessione viene quindi passata all'oggetto RMO durante la creazione dell'istanza o tramite l'assegnazione alla proprietà ConnectionContext dell'oggetto. In questo modo, un oggetto di programmazione RMO e le istanze dell'oggetto connessione possono essere creati e gestiti separatamente e un singolo oggetto connessione può essere riutilizzato con più oggetti di programmazione RMO. Le regole seguenti sono valide per le connessioni a un server di replica:
Tutte le proprietà per la connessione vengono definite per un oggetto ServerConnection specificato.
Ogni connessione a un'istanza di SQL Server deve disporre del relativo oggetto ServerConnection.
Tutte le informazioni di autenticazione che consentono di stabilire la connessione e accedere correttamente al server vengono fornite nell'oggetto ServerConnection.
Per impostazione predefinita, le connessioni vengono stabilite tramite l'autenticazione di Microsoft Windows. Per utilizzare l'autenticazione di SQL Server, la proprietà LoginSecure deve essere impostata su False e Login e Password devono essere impostate su un account di accesso e una password di SQL Server validi. Le credenziali di sicurezza devono essere sempre archiviate e gestite in modo protetto, e fornite in fase di esecuzione laddove possibile.
Il metodo Connect deve essere chiamato prima di passare la connessione a qualsiasi oggetto di programmazione RMO.
Esempi
Per utilizzare qualsiasi esempio di codice fornito, è necessario scegliere l'ambiente di programmazione, il modello di programmazione e il linguaggio di programmazione per la creazione dell'applicazione. Per ulteriori informazioni, vedere "Procedura: Creare un progetto Visual Basic SMO in Visual Studio .NET" o "Procedura: Creare un progetto Visual C# SMO in Visual Studio .NET" nella documentazione online di SQL Server.
Connessione all'istanza locale di SQL Server tramite l'autenticazione di Windows in Visual Basic
La connessione all'istanza locale di SQL Server non richiede molto codice, ma si basa al contrario sulle impostazioni predefinite per il metodo di autenticazione e per il server. La prima operazione che richiede il recupero di dati comporterà la creazione di una connessione.
Questo esempio include il codice Visual Basic .NET per la connessione all'istanza locale di SQL Server tramite l'autenticazione di 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.
Connessione all'istanza locale di SQL Server tramite l'autenticazione di Windows in Visual C#
La connessione all'istanza locale di SQL Server non richiede molto codice, ma si basa al contrario sulle impostazioni predefinite per il metodo di autenticazione e per il server. La prima operazione che richiede il recupero di dati comporterà la creazione di una connessione.
Questo esempio include il codice Visual C# .NET per la connessione all'istanza locale di SQL Server tramite l'autenticazione di 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.
Connessione a un'istanza remota di SQL Server tramite l'autenticazione di Windows in Visual Basic
Quando ci si connette a un'istanza di SQL Server tramite l'autenticazione di Windows, non è necessario specificare il tipo di autenticazione. L'autenticazione di Windows rappresenta l'impostazione predefinita.
Questo esempio include il codice Visual Basic .NET per la connessione all'istanza remota di SQL Server tramite autenticazione di Windows. La variabile stringa strServer contiene il nome dell'istanza remota.
'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.
Connessione a un'istanza remota di SQL Server tramite l'autenticazione di Windows in Visual C#
Quando ci si connette a un'istanza di SQL Server tramite l'autenticazione di Windows, non è necessario specificare il tipo di autenticazione. L'autenticazione di Windows rappresenta l'impostazione predefinita.
Questo esempio include il codice Visual C# .NET per la connessione all'istanza remota di SQL Server tramite l'autenticazione di Windows. La variabile stringa strServer contiene il nome dell'istanza remota.
{
//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.
Connessione a un'istanza di SQL Server tramite l'autenticazione di SQL Server in Visual Basic
Quando si esegue la connessione a un'istanza di SQL Server tramite l'autenticazione di SQL Server, è necessario specificare il tipo di autenticazione. In questo esempio viene illustrato il metodo alternativo per la dichiarazione di una variabile oggetto ServerConnection che consente il riutilizzo delle informazioni di connessione.
In questo esempio è incluso il codice Visual Basic .NET in cui viene illustrato come connettersi all'istanza remota, mentre nel parametro vPassword sono contenuti l'account di accesso e la password.
' 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
Connessione a un'istanza di SQL Server tramite l'autenticazione di SQL Server in Visual C#
Quando si esegue la connessione a un'istanza di SQL Server tramite l'autenticazione di SQL Server, è necessario specificare il tipo di autenticazione. In questo esempio viene illustrato il metodo alternativo per la dichiarazione di una variabile oggetto ServerConnection che consente il riutilizzo delle informazioni di connessione.
Questo esempio include il codice Visual C# .NET in cui viene illustrato come connettersi all'istanza remota, mentre l'oggetto vPassword contiene l'account di accesso e la password.
// 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
}
}