zoukankan      html  css  js  c++  java
  • 仿VS的Add Connection功能,获取服务器列表及数据库列表

         VS中有Add Connection功能的界面,能够搜索到局域网内的服务器,连接上服务器后能够根据用户名和密码获得数据库的列表。看似很复杂的一个功能,其实很简单。

    1、获取服务器列表。

    VS中提供了SqlDataSourceEnumerator类,命名空间为System.Data.Sql,直接调用GetDataSource()方法,即可或得服务器列表的DataTable。

    代码奉上:

            private void GetServerName()
            {
                List<string> serverList = new List<string>();
    
                DataTable dataTable = SqlDataSourceEnumerator.Instance.GetDataSources();
    
                DataRow[] rows = dataTable.Select("", "ServerName,InstanceName Asc");
    
                foreach (DataRow row in rows)
                {
                    string server = row["ServerName"].ToString();
                    if (string.IsNullOrEmpty(row["InstanceName"].ToString()) == false)
                    {
                        server = server + "\\" + row["InstanceName"].ToString();
                    }
    
                    serverList.Add(server);
                }
    
                this.SetComboBoxItemSource(cbServer, serverList);
            }
    

     2、获取数据库的所有数据库列表。

    这个比较简单,连接上服务器后,连接master数据库,通过查询systemdatabases就可以了。

    代码奉上:

            private void GetDataBasesName()
            {
                List<string> dataBaseList = new List<string>();
              //获取服务器、用户名和密码,可以自己改改参数。
                string server = this.GetControlText(this.cbServer);
                string uid = this.GetControlText(this.txtUid);
                string pwd = this.GetControlText(this.pbPwd);
    
                string connString = string.Format("server={0};database=master;uid={1};pwd={2}", server, uid, pwd);
                string sql = "select name from SYSDATABASES order by name";
    
                SqlConnection conn = new SqlConnection(connString);
                try
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    SqlDataReader reader = cmd.ExecuteReader();
    
                    while (reader.Read())
                    {
                        dataBaseList.Add(reader[0].ToString());
                    }
                }
                catch (Exception)
                {
                    //throw;
                }
                finally
                {
                    conn.Close();
                }
    
                this.SetComboBoxItemSource(this.cbDataBase, dataBaseList);
            }
    

    如有不当之处,还请大家多多指教。

  • 相关阅读:
    Dapper 关于类型转换及返回
    Lombok中关于@Data的使用
    java xml中sql处理大于号与小于号
    sqlserver DATEDIFF查询当天/本周/本月/本季度/本年的数据
    idea EasyCode代码生成器插件使用
    sql server 一对多只取第一条 row_number() over (partition by XX order by YY )
    C# 单元测试案例
    C#.字符串转数组,数组转字符串
    关于c#:使用Clipboard.SetText(string)复制空字符串
    progressBarControl 和 backgroundWorker 同时使用方法
  • 原文地址:https://www.cnblogs.com/sshoub/p/2366072.html
Copyright © 2011-2022 走看看