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

2019-10-28 10:36发布

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

在我的测试代码,我使用的是"generic" DbConnection对象和一个简单的工厂来创建具体的实例SqlConnetionOdbcConnetion子类(它们都来自获得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);

Answer 1:

它是一个记录/预期的行为?

是。 见检索数据库架构信息

难道我做错了什么?

如果你的目标是阅读SQL Server元在供应商无关的方式,那么是的。 你应该直接查询SQL Server目录视图。 sys.databases中,SYS.TABLES等。



Answer 2:

确保您的“数据库”模式有一个有效的密钥。 如果关键要实现该数据库不遵循“类名” +“ID”实体框架规则添加[关键]数据注解。



文章来源: GetSchema(“Databases”) on ODBC connection (C#)