如何使用c#.net从combobox中获取sql server中所有数据库的列表

我通过文本框输入源名称userid和密码,并希望数据库列表应该在combobox中列出,以便用户可以选择所有四个选项sourcename,userid,password和databasename来执行连接

将根据用户从其他系统检索数据库。 用户将输入IP,用户ID和密码,他们应该在combobox中获取数据库列表,以便他们可以选择所需的数据库并执行连接

private void frmConfig_Load(object sender, EventArgs e) { try { string Conn = "server=servername;User Id=userid;" + "pwd=******;"; con = new SqlConnection(Conn); con.Open(); da = new SqlDataAdapter("SELECT * FROM sys.database", con); cbSrc.Items.Add(da); } catch (Exception ex) { MessageBox.Show(ex.Message); } } 

我试图这样做,但它没有生成任何数据

sys.databases中

 SELECT name FROM sys.databases; 

编辑:

我建议使用IDataReader,返回List并缓存结果。 您只需将下拉列表绑定到结果,并在需要时从缓存中检索相同的列表。

 public List GetDatabaseList() { List list = new List(); // Open connection to the database string conString = "server=xeon;uid=sa;pwd=manager; database=northwind"; using (SqlConnection con = new SqlConnection(conString)) { con.Open(); // Set up a command with the given query and associate // this with the current connection. using (SqlCommand cmd = new SqlCommand("SELECT name from sys.databases", con)) { using (IDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { list.Add(dr[0].ToString()); } } } } return list; } 

首先添加以下程序集:

  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Management.Sdk.Sfc.dll
  • Microsoft.SqlServer.Smo.dll

C:\ Program Files \ Microsoft SQL Server \ 100 \ SDK \ Assemblies \

然后使用下面的代码:

 var server = new Microsoft.SqlServer.Management.Smo.Server("Server name"); foreach (Database db in server.Databases) { cboDBs.Items.Add(db.Name); } 

您可以使用以下查询:

  • EXEC sp_databases
  • SELECT * FROM sys.databases

哔叽

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

只需使用GetSchema方法:

 using (SqlConnection connection = GetConnection()) { connection.Open(); DataTable dtDatabases = connection.GetSchema("databases"); //Get database name using dtDatabases["database_name"] }