ODBC连接上的GetSchema(“数据库”)(C#)

时间:2018-05-04 17:09:10

标签: c# sql-server odbc

我正在测试C#中的各种数据库连接方法。特别是,我正在测试SqlConnectionOdbcConnection类;我的DB是SQLServer Express(.\SQLEXPRESS)。除了列出服务器上的可用数据库之外,两者都运行得相当好。

在我的测试代码中,我使用"generic" DbConnection对象和一个简单的工厂来创建特定SqlConnetionOdbcConnetion子类的实例(它们都派生自{{ 1}}):

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公开的所有密钥,ODBC版本只返回SQLServer版本公开的项目的子集。我找不到关于这个具体问题的任何暗示。这是记录/预期的行为吗?我做错了吗?

注意:这里我是如何构建ODBC连接字符串的:

GetSchema()

2 个答案:

答案 0 :(得分:0)

确保您的“数据库”模型具有有效密钥。如果要为该数据库实现的密钥不遵循“ClassName”+“ID”实体框架规则,请添加[Key] Data批注。

答案 1 :(得分:0)

  

是记录/预期的行为吗?

是。见Retrieving Database Schema Information

  

我做错了吗?

如果您的目标是以提供程序无关的方式读取SQL Server元数据,那么是。您应该直接查询SQL Server目录视图。 sys.databases,sys.tables等