2009-10-23 17 views
5

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)

Si passa 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); 

risposta

8

Non sono sicuro di aver capito cosa vuoi.

Se si dispone già di una stringa di connessione, e si sta cercando di estrarre il nome del server da esso per uso altrove, è possibile decodificare in questo modo:

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

Se state costruendo la stringa di connessione per la prima volta, poi:

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

Accetto - sembra che Ashish stia cercando di indovinare l'applicazione su quale server utilizzare, cosa che semplicemente non può fare. Oltre a selezionare l'istanza locale predefinita tramite '(local)' l'unica altra opzione sensata è RACCONTARE il codice su quale server utilizzare. Come lo fai, dipende da te. –

0

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


Inoltre, invece di costruire una stringa di connessione utilizzando String.Format, è necessario utilizzare un SqlConnectionStringBuilder. Questo gestirà i valori con punto e virgola.

Ad 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; 
+1

localhost funziona solo se non è un'istanza denominata –

0

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

+0

no; sta cercando di costruire una stringa di connessione. – SLaks

+1

quindi stiamo ancora costruendo la nostra stringa di connessione? In questo caso qual è la logica che determina quale server SQL scegliere? Se è locale, allora come hai detto, basta usare localhost. Ma pensavo che fosse già passato il nome del server e ora abbiamo bisogno di recuperarlo in qualche modo nel codice ... – DmitryK

+0

Come ho capito la domanda, questo è quello che sta chiedendo. – SLaks

Problemi correlati