2012-11-13 48 views
1

我嘗試在此代碼中獲取服務器中SQL數據庫的名稱我使用sqldatasource枚舉器在我的計算機中列出名爲sever的組合框中的所有sql實例現在我正在嘗試得到的另一個組合框所有SQL數據庫名稱的名字,當我從服務器組合框中選擇一個特定的SQL實例,但它doenot工作基於sql實例枚舉獲取sql服務器中的數據庫列表

private void Connect_Load(object sender, EventArgs e) 
    { 
     sqlservertable = sqlenumeratotr.GetDataSources(); 

     server.DataSource = sqlservertable; 

     server.DisplayMember = sqlservertable.Columns["servername"].ToString(); 
     server.ValueMember = sqlservertable.Columns["servername"].ToString(); 


    } 

    private void server_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     servername = server.SelectedValue.ToString(); 
     constring = "server=servername;Integrated Security = sspi"; 
     SqlConnection con = new SqlConnection(constring); 

     con.Open(); 
     dbltables = con.GetSchema("Databases"); 



     con.Close(); 
     databases.DataSource = dbltables; 
     databases.DisplayMember = dbltables.Columns["database_name"].ToString(); 
    } 

回答

2
select name from master.sys.databases 
+0

你能解釋更多石南花 –

+0

我相信這是你需要執行的SQL語句。 –

+0

問題是,我想要從另一個組合框選擇實例的組合框中的所有數據庫 –

3

如果我理解正確的問題,我認爲Heather的回答充分解決了這個問題,我會稍微擴展一下。

您需要運行Heather提到的查詢,然後將結果綁定到另一個ComboBox。

private void server_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string serverName = server.SelectedValue.ToString(); 
    string connString = string.Format("server={0};Integrated Security = sspi", serverName); 
    using (var con = new SqlConnection(connString)) 
    { 
     using (var da = new SqlDataAdapter("SELECT Name FROM master.sys.databases", con)) 
     { 
      var ds = new DataSet(); 
      da.Fill(ds); 
      databases.DataSource = ds.Tables[0].Rows.Select(x => x["Name"].ToString()); 
      //... 
     } 
    } 
}