1

このコードでサーバー内の SQL データベースの名前を取得しようとしました。自分のコンピューターのすべての SQL インスタンスを、sqldatasource 列挙子を使用してサーバーという名前のコンボボックスにリストしました。サーバーコンボボックスから特定の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();
    }
4

2 に答える 2

3

質問を正しく理解していれば、ヘザーの答えは質問に十分に対応していると思います。少し詳しく説明します。

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());
            //...
        }
    }
}
于 2012-11-13T15:33:59.410 に答える
2
select name from master.sys.databases
于 2012-11-13T02:01:07.840 に答える