2012-12-03 64 views
5

我正在使用框架4.0和SQL Server 2008 R2的C#。 我列出了SQL Server 2008中使用此代碼:獲取數據庫列表取決於所選的服務器

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

我上市的ComboBox我的服務器。

如何列出數據庫,取決於我在ComboBox中選擇的服務器?

我發現這個tutorial,但它需要sqlconnection,我沒有選擇服務器時該如何連接?

+0

什麼SQLServers之間'的區別:

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

從選定的服務器獲取數據庫列表[System.Math.Max(System.Threading.Interlocked.Increment(ref f),f - 1)] = SQLServer;' 和 'sqlServers [++ f] = sqlServer; ' 在這個方法中? –

回答

13

這是你如何在網絡上獲取服務器名稱的列表:

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

謝謝,但我怎麼能從這個serverName的數據庫 – user609511

+0

@ user609511:你將不得不連接到每個服務器來獲取其數據庫。 –

+0

連接到實例,數據庫'master',並執行'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]; 
    } 
相關問題