2012-12-03 30 views
5

Tôi đang sử dụng C# với khung 4.0 và SQL Server 2008 R2. Tôi đã liệt kê máy chủ SQL 2008 với mã này:Lấy danh sách cơ sở dữ liệu phụ thuộc vào máy chủ được chọn

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

i liệt kê Máy chủ của tôi trên ComboBox.

Làm cách nào để liệt kê cơ sở dữ liệu, phụ thuộc vào máy chủ nào tôi chọn trong ComboBox?

Tôi tìm thấy số này tutorial, nhưng cần sqlconnection, làm cách nào để kết nối khi tôi không chọn máy chủ?

+0

sự khác biệt giữa 'SQLServers là những gì [System.Math.Max ​​(System.Threading.Interlocked.Increment (ref f), f - 1)] = SQLServer; ' và ' sqlServers [++ f] = sqlServer; ' Trong phương pháp này? –

Trả lời

13

Đây là cách bạn có được một danh sách các tên máy chủ trên mạng:

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

Để Nhận một Danh sách các cơ sở dữ liệu từ máy chủ chọn:

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

cảm ơn, nhưng làm thế nào tôi có thể lấy cơ sở dữ liệu từ máy chủ này – user609511

+0

@ user609511: bạn sẽ phải kết nối với mỗi máy chủ để có được cơ sở dữ liệu của nó. –

+0

Kết nối với cá thể, cơ sở dữ liệu 'chính' và thực thi' 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]; 
    } 
Các vấn đề liên quan