代码之家  ›  专栏  ›  技术社区  ›  Giuseppe Guerrini

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

  •  0
  • Giuseppe Guerrini  · 技术社区  · 7 年前

    我正在用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);
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   David Browne - Microsoft    7 年前

    是否记录了/预期的行为?

    对看见 Retrieving Database Schema Information

    我做错什么了吗?

    如果您的目标是以与提供程序无关的方式读取SQL Server元数据,那么可以。您应该直接查询SQL Server目录视图。系统。数据库,系统。表格等。

        2
  •  0
  •   Rod Ramírez    7 年前

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