C#Winform选择要连接的SQL Server和数据库

时间:2018-04-20 13:39:16

标签: c# winforms

我正在使用一个带有两个下拉/组合框,一个测试字段和按钮的小型c#Winforms应用程序,它将允许用户选择服务器,数据库,然后输入一个ref id并搜索记录。

我正在努力解决如何让组合框允许我在第二个下拉列表中选择服务器然后选择数据库。

我已经在ApplicatonSettings中添加了三台服务器,我只是不知道开始/做这个的最佳方式,所以希望得到建议?

1 个答案:

答案 0 :(得分:0)

我会创建一个SettingsForm(具有连接字符串的属性),然后有一个MainForm,他们可以点击下拉组合框。将SQL数据源添加到项目中。

然后做类似的事情来获取实例:

    private List<string> GetSqlInstances(bool serverDiscovery = false)
    {
        if (serverDiscovery && InstancesLoaded) { return null; }
        var serverList = new List<string>();
        InstancesLoaded = true;

        var instance = SqlDataSourceEnumerator.Instance;
        var table = instance.GetDataSources();
        if (table.Rows == null) { return null; }
        foreach (DataRow row in table.Rows)
        {
            serverList.Add(row["ServerName"].ToString());
            if (!string.IsNullOrEmpty(row["InstanceName"].ToString()))
                serverList.Add(row["ServerName"] + "\\" + row["InstanceName"]);
        }

        return serverList;
    }

    #region Database_Combobox

    private void cbxDatabaseName_ButtonPressed(object sender, ButtonPressedEventArgs e)
    {
        cbxDatabaseName.Properties.Items.Clear();
        if (SqlHelper == null) { return; }
        try
        {
            var conStr = SqlHelper.GenerateSqlConnectionString
            (
                cbxSQLInstances?.Text,
                IntegratedSecurity,
                string.Empty,
                txtUserName?.Text,
                txtPassword?.Text
            );

            var con = conStr?.ConnectionString != null ? new SqlConnection(conStr.ConnectionString) : null;

            if (con == null)
                return;

            con.Open();
            var databases = con.GetSchema("Databases");
            if (databases?.Rows != null)
            {
                foreach (DataRow row in databases.Rows)
                    cbxDatabaseName.Properties.Items.Add(row.Field<string>(@"database_name"));
            }
            cbxDatabaseName.ShowPopup();
            con.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }