我正在用C#测试各种DB连接方法。特别是,我正在测试
SqlConnection
和
OdbcConnection
类别;我的数据库是SQLServer Express(
.\SQLEXPRESS
)。除了列出服务器上的可用数据库外,这两种方法都工作得相当好。
在我的测试代码中,我使用
"generic"
DbConnection
对象和一个简单工厂来创建特定
SqlConnetion
和
OdbcConnetion
子类(它们都源于
数据库连接类
):
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"
是一个
ODBC连接
(注意,数据库是一样的),我得到一个异常
"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);