Come ottenere il nome del server tramite codice se è installato SQL Server (Standard Edition)

Come ottenere il nome del server tramite codice se è installato SQL Server (Standard Edition).

Passiamo il nome del server durante la creazione di una stringa di connessione per connettere SQL Server. Possiamo recuperare questo valore attraverso il codice?

string sqlConnectionString = string.Format( "user id={0};password={1};server={2};Trusted_Connection=no;database=TestDB; connection timeout={3}", dirDBinfo.UserName, dirDBinfo.Password, "ServerName", dirDBinfo.TimeOut); 

Non sono sicuro di capire quello che vuoi.

Se si dispone già di una stringa di connessione e si sta tentando di estrarre il nome del server da esso per utilizzarlo altrove, è ansible eseguirne il reverse engineering in questo modo:

 var parser = new SqlConnectionStringBuilder(connectionString); var serverName = parser.DataSource; 

Se stai costruendo la tua stringa di connessione per la prima volta, allora:

  1. Se si sa che si desidera connettersi a SQL Server sul computer su cui è in esecuzione il codice client, utilizzare solo (local) per il nome del server. Se SQL Server ha un nome di istanza, specificarlo in questo modo: (local)\myinstancename .
  2. Se non sai in anticipo a quale server collegarti, spetta a te ottenere queste informazioni da qualche altra parte.

Non puoi semplicemente eseguire SELECT @@ SERVERNAME contro questa connessione?

Il server è sul computer locale?
In tal caso, impostare il nome del server su localhost .
In caso contrario, utilizzare SqlDataSourceEnumerator .


Inoltre, invece di build una stringa di connessione usando String.Format , dovresti usare SqlConnectionStringBuilder . Questo gestirà i valori con punto e virgola.

Per esempio:

 var builder = new SqlConnectionStringBuilder(); builder.UserID = dirDBinfo.UserName; builder.Password = dirDBinfo.Password; builder.Server= "localhost"; builder.UserID = dirDBinfo.UserName; builder["Trusted_Connection"] = "no"; builder.Database = "TestDB" builder.ConnectTimeout = dirDBinfo.TimeOut;