C# C连接到数据库并列出数据库
可能重复: 我试图弄清楚在连接到服务器后如何列出数据库,而不首先指定数据库C# C连接到数据库并列出数据库,c#,sql,database,ado.net,sqlconnection,C#,Sql,Database,Ado.net,Sqlconnection,可能重复: 我试图弄清楚在连接到服务器后如何列出数据库,而不首先指定数据库 sqlConnection1 = new SqlConnection("Server=" + sqlServer + ";Database=" + database + ";User ID=" + userName + ";Password=" + password + ";Trusted_Connection=False;"); 因此,基本上我想要的是最终用户连接到sql server,然后用下拉列表填充他
sqlConnection1 = new SqlConnection("Server=" + sqlServer + ";Database=" + database +
";User ID=" + userName + ";Password=" + password + ";Trusted_Connection=False;");
因此,基本上我想要的是最终用户连接到sql server,然后用下拉列表填充他们可以连接和查询的数据库列表
想法?您可以编写一个存储过程,它可以返回该服务器上的数据库列表
SELECT name
FROM master.sys.databases
或
数据库的最新列表将在数据库本身中。为什么不作为默认数据库连接到tempdb,因为您必须先连接到要启动的数据库,然后从master.sys.databases进行查询 从master.sys.databases中选择[name] 然后,您可以使用任何必要的数据库更新连接字符串,或者使用ChangeDatabase方法简单地更改数据库 e、 g.connection.ChangeDatabaseselectedDB 您也可以连接到master,但我喜欢在tempdb中保留默认连接,因为有时人们会忘记在创建对象之前更改数据库。我宁愿垃圾进入tempdb而不是master,因为tempdb是在SQL重新启动时重新创建的 你可以试试看
select * from master.sys.databases
您可以使用:
要确定支持的架构集合的列表,请调用
不带参数或具有架构集合名称的GetSchema方法
元数据集合。这将返回一个DataTable,其中包含
支持的架构集合,它们所支持的限制数
每个支持,以及它们使用的标识符部分的数量
您可以使用SMO-
这是代码项目中的两个示例代码:
这将为您提供数据库名称:
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中,或者直接连接到主数据库并通过代码查询-假设连接字符串中的SQL登录名有足够的权限访问主数据库。当然,sqlConnection.Open;应该用try{}catchException e{}包装,以防出现错误的登录/超时等情况。您不需要手动关闭连接,因为您将其包装在using语句中;如果出现错误的登录/超时等情况,应使用try{}catch异常e{}包装@Dannybecket:不应使用空catch来处理连接问题。那么最好让异常冒泡到全局处理程序。因为它不是这个问题的一部分,所以我没有展示它。空捕获不是这个想法,我只是指出您应该检查异常。
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");
}
}
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();
}
}