2009-10-23 19 views
5

Cómo obtener el nombre del servidor a través del código si SQL Server (Standard Edition) está instalado.Cómo obtener el nombre del servidor a través del código si SQL Server (Standard Edition) está instalado

Pasamos el nombre del servidor al crear una cadena de conexión para conectar SQL Server. ¿Podemos recuperar este valor a través del código?

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

Respuesta

8

No estoy seguro de que entiendo lo que quiere.

Si ya tiene una cadena de conexión, y que está tratando de extraer el nombre del servidor de la misma para su uso en otros lugares, se puede realizar ingeniería inversa que de este modo:

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

Si usted está construyendo su cadena de conexión por primera vez, entonces:

  1. Si sabe que desea conectarse al servidor SQL Server en la máquina que su código de cliente está ejecutando, entonces sólo tiene que utilizar (local) el nombre del servidor. Si SQL Server tiene un nombre de instancia, especifíquelo así: (local)\myinstancename.
  2. Si no sabe con anticipación a qué servidor conectarse, entonces depende de usted obtener esa información de otro lado.
+1

Estoy de acuerdo, parece que Ashish intenta que la aplicación adivine qué servidor usar, lo que simplemente no puede hacer. Además de elegir la instancia local predeterminada a través de '(local)', la única otra opción sensata es indicar el código que servidor usar. Cómo lo haces depende de ti. –

0

¿Está el servidor en la computadora local?
Si es así, establezca el nombre del servidor en localhost.
Si no, use SqlDataSourceEnumerator.


Además, en lugar de construir una cadena de conexión usando String.Format, se debe utilizar un SqlConnectionStringBuilder. Esto manejará los valores con punto y coma.

Por ejemplo:

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 solo funciona si no es una instancia con nombre –

0

¿No puedes ejecutar SELECT @@ SERVERNAME en contra de esta conexión?

+0

no; él está tratando de construir una cadena de conexión. – SLaks

+1

por lo que todavía estamos construyendo nuestra cadena de conexión? En este caso, ¿cuál es la lógica que determina qué servidor SQL elegir? Si es local, entonces como dijiste, simplemente usa localhost. Pero pensé que ya había pasado el nombre del servidor y ahora tenemos que recuperarlo de alguna manera en el código ... – DmitryK

+0

Según entiendo la pregunta, eso es lo que está preguntando. – SLaks

Cuestiones relacionadas