2012-12-03 22 views
5

Sto utilizzando C# con framework 4.0 e SQL server 2008 R2. Ho elencato il server SQL 2008 con questo codice:L'elenco dei database dipende dal server scelto

public static string[] GetSQLServerList() 
     { 
      SqlDataSourceEnumerator dse = SqlDataSourceEnumerator.Instance; 
      DataTable dt = dse.GetDataSources(); 
      if (dt.Rows.Count == 0) 
      { 
       return null; 
      } 

      string[] SQLServers = new string[dt.Rows.Count]; 
      int f = -1; 
      foreach (DataRow r in dt.Rows) 
      { 
       string SQLServer = r["ServerName"].ToString(); 
       string Instance = r["InstanceName"].ToString(); 
       if (Instance != null && !string.IsNullOrEmpty(Instance)) 
       { 
        SQLServer += "\\" + Instance; 
       } 
       SQLServers[System.Math.Max(System.Threading.Interlocked.Increment(ref f), f - 1)] = SQLServer; 
      } 
      Array.Sort(SQLServers); 
      return SQLServers; 
     } 

ho elencato il mio Server su ComboBox.

Come posso elencare il database, dipende dal server che scelgo in ComboBox?

Ho trovato questo tutorial, ma è necessario sqlconnection, come posso connettermi quando non ho scelto il server?

+0

qual è la differenza tra 'SQLservers [System.Math.Max ​​(System.Threading.Interlocked.Increment (ref f), f - 1)] = SQLServer; ' ' sqlServers [++ f] = sqlServer; ' In questo metodo? –

risposta

13

questo modo si ottiene un elenco di nomi di server sulla rete:

List<String> ServerNames = new List<String>(); 

SqlDataSourceEnumerator servers = SqlDataSourceEnumerator.Instance; 
DataTable serversTable = servers.GetDataSources(); 

    foreach (DataRow row in serversTable.Rows) { 
      string serverName = row[0].ToString(); 

      try { 

       if (row[1].ToString() != "") { 

          serverName += "\\" + row[1].ToString(); 

       } 


       } 
       catch { 


       } 

       ServerNames.Add(serverName); 
     } 

per ottenere un elenco di banche dati da server selezionato:

List<String> databases = new List<String>(); 

SqlConnectionStringBuilder connection = new SqlConnectionStringBuilder(); 

connection.DataSource = SelectedServer; 
// enter credentials if you want 
//connection.UserID = //get username; 
// connection.Password = //get password; 
connection.IntegratedSecurity = true; 

String strConn = connection.ToString(); 

//create connection 
    SqlConnection sqlConn = new SqlConnection(strConn); 

//open connection 
sqlConn.Open(); 

//get databases 
DataTable tblDatabases = sqlConn.GetSchema("Databases"); 

//close connection 
sqlConn.Close(); 

//add to list 
foreach (DataRow row in tblDatabases.Rows) { 
     String strDatabaseName = row["database_name"].ToString(); 

     databases.Add(strDatabaseName); 


}  
+0

grazie, ma come posso ottenere il database da questo serverName – user609511

+0

@ user609511: dovrai collegarti a ciascun server per ottenere i suoi database. –

+0

Collegarsi all'istanza, al database 'master', ed eseguire' sp_databases' http://msdn.microsoft.com/en-us/library/ms176070.aspx – tomfanning

1
using (var connection = new System.Data.SqlClient.SqlConnection("ConnectionString")) 
    { 
     connection.Open(); 
     var command = new System.Data.SqlClient.SqlCommand(); 
     command.Connection = connection; 
     command.CommandType = CommandType.Text; 
     command.CommandText = "SELECT name FROM master.sys.databases"; 

     var adapter = new System.Data.SqlClient.SqlDataAdapter(command); 
     var dataset = new DataSet(); 
     adapter.Fill(dataset); 
     DataTable dtDatabases = dataset.Tables[0]; 
    } 
Problemi correlati