C#连接数据库并列出数据库

可能重复:
SQL Server查询以查找所有当前数据库名称

我试图弄清楚如何在连接到服务器之后列出数据库而不首先指定数据库。

sqlConnection1 = new SqlConnection("Server=" + sqlServer + ";Database=" + database + ";User ID=" + userName + ";Password=" + password + ";Trusted_Connection=False;"); 

基本上我想要的是最终用户连接到sql server,然后有一个下拉列表,其中填充了他们可以连接和查询的db列表。

想法?

您可以使用SqlConnection.GetSchema

 using(var con = new SqlConnection("Data Source=Yourserver; Integrated Security=True;")) { con.Open(); DataTable databases = con.GetSchema("Databases"); foreach (DataRow database in databases.Rows) { String databaseName = database.Field("database_name"); short dbID = database.Field("dbid"); DateTime creationDate = database.Field("create_date"); } } 

SQL Server架构集合(ADO.NET)

要确定支持的架构集合列表,请调用不带参数的GetSchema方法,或使用架构集合名称“MetaDataCollections”。 这将返回一个DataTable,其中包含受支持的架构集合的列表,它们各自支持的限制数量以及它们使用的标识符部分的数量。

您可以编写一个存储过程,它可以返回该服务器上的数据库列表。

 SELECT name FROM master.sys.databases 

要么

 EXEC sp_databases 

这应该得到你的数据库名称:

 var connectionString = string.Format("Data Source=localhost;User ID={0};Password={1};", userName, password); DataTable databases = null; using (var sqlConnection = new SqlConnection(connectionString)) { sqlConnection.Open(); databases = sqlConnection.GetSchema("Databases"); sqlConnection.Close(); } if (databases != null) { foreach (DataRow row in databases.Rows) { foreach (var item in row.ItemArray) { Console.Write("{0} ", item); } Console.WriteLine(); } } 

最后排除所有打印。 在控制台应用程序中抛出所有内容以查看它的运行情况。 表名在row.ItemArray索引0中。

您可以使用SMO – SQL Server管理对象 。

这是代码项目中的两个示例代码:

使用SMO进行SQL Server身份validation

使用SMO的数据库

最新的数据库列表将在数据库中。 为什么不连接到tempdb作为默认数据库(因为你必须连接到某些东西)开始,然后从master.sys.databases查询。

select [name] from master.sys.databases

然后,您可以使用所需的任何数据库更新连接字符串,或者只需使用ChangeDatabase()方法更改数据库。

例如connection.ChangeDatabase(selectedDB);

您也可以连接到master,但我喜欢在tempdb中保留默认连接,因为有时人们忘记在创建对象之前更改数据库。 我宁愿垃圾进入tempdb而不是master,因为在SQL重启时会重新创建tempdb。

你可以试试

 select * from master.sys.databases