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

时间:2012-10-12 15:42:08

标签: c# sql database ado.net sqlconnection

  

可能重复:
  SQL Server query to find all current database names

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

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

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

想法?

6 个答案:

答案 0 :(得分:42)

您可以使用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<String>("database_name");
        short dbID = database.Field<short>("dbid");
        DateTime creationDate = database.Field<DateTime>("create_date");
    }
} 

SQL Server Schema Collections (ADO.NET)

  

要确定支持的架构集合列表,请调用   没有参数的GetSchema方法,或者使用模式集合名称   “MetaDataCollections”。这将返回一个带有列表的DataTable   支持的模式集合,它们的限制数量   每个支持,以及它们使用的标识符部分的数量。

答案 1 :(得分:5)

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

SELECT name
FROM master.sys.databases

EXEC sp_databases

答案 2 :(得分:3)

这应该为您提供数据库名称:

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中。

答案 3 :(得分:2)

您可以使用SMO - SQL Server Management Objects

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

SQL Server Authentication using SMO

Databases using SMO

答案 4 :(得分:1)

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

select [name] from master.sys.databases

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

e.g。 connection.ChangeDatabase(selectedDB);

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

答案 5 :(得分:0)

您可以尝试使用

select * from master.sys.databases