我测试在C#中的各种数据库连接的方法。 特别是,我测试SqlConnection
和OdbcConnection
类; 我的数据库是SQLServer的快车( .\SQLEXPRESS
)。 两者都工作得相当好,除了在服务器上列出可用的数据库。
在我的测试代码,我使用的是"generic"
DbConnection
对象和一个简单的工厂来创建具体的实例SqlConnetion
和OdbcConnetion
子类(它们都来自获得DbConnection
):
DbConnection connection;
switch (connection_type)
{
case DbConnectionType.DBCONN_MSSQL:
connection = new SqlConnection(...sql connection string...);
break;
case DbConnectionType.DBCONN_ODBC:
connection = new OdbcConnection(...odbc connection string...);
break;
}
诀窍似乎除了当我试图让的服务器上的数据库列表中很好地工作:
DataTable databases = connection.GetSchema("Databases");
foreach (DataRow database in databases.Rows)
{
String databaseName = database["database_name"] as String;
Console.WriteLine(databaseName);
}
当"connection"
是一个OdbcConnection
(和说明,数据库是一样的),我得到一个异常说, "Databases" key was not found
。 我列出了通过暴露所有的按键GetSchema()
和ODBC版本只返回SQLServer的版本暴露了项目的子集。 我找不到任何有关这一特定问题的任何暗示。 它是一个记录/预期的行为? 难道我做错了什么?
注:我在这里如何建立ODBC连接字符串:
OdbcConnectionStringBuilder builder;
builder = new OdbcConnectionStringBuilder();
builder.Driver = "SQL Server";
builder.Add("Server", ".\\SQLEXPRESS");
builder.Add("Uid", "");
builder.Add("Pwd", ""); // Using current user
builder.Add("Integrated Security", "SSPI");
connection = new OdbcConnection(builder.ConnectionString);