【问题标题】:Selecting a specific database in odbc c#在 odbc c# 中选择特定数据库
【发布时间】:2015-06-26 20:05:38
【问题描述】:

我已经找了一段时间了,我还没有找到任何关于这个的东西。我正在尝试通过 ODBC 从特定数据库中获取所有表的列名。 我一直在尝试使用conn.GetSchema("Tables")conn.GetSchema("Columns")。问题是它返回了我服务器中的所有表。
我有多个数据库(即数据库''Food''、''Cooks''等),我试图从一个特定的数据库(即只有''Food'')中获取表和列。 我的连接字符串确实指定了正确的数据库,但是当我使用GetSchema 时它似乎被忽略了。

有人可以帮忙吗?这是我现在使用的代码

            DataTable tables = conn.GetSchema("Tables");
            DataTable columns = conn.GetSchema("Columns");

            foreach (DataRow r in tables.Rows)
            {
                string name = r["TABLE_NAME"].ToString();
            }
            foreach (DataRow row in columns.Rows)
            {
                string name = row["COLUMN_NAME"].ToString();

                if (!allMongoInfo.ContainsKey(name)) //Dictionary
                    issuesImpala.Add (name);          
            }

【问题讨论】:

  • 你用的是什么数据库?
  • 我正在为 Impala 使用 Cloudera ODBC 驱动程序

标签: c# database odbc database-schema


【解决方案1】:

我不确定这是否可以与您的 ODBC 驱动程序一起使用,但这是使用 OdbcConnectionGetSchema 方法获取单个表和/或该表的列的方法

using (OdbcConnection con = new OdbcConnection("......"))
{ 
    con.Open();
    var schema = con.GetSchema("Tables", new string[] {null, null, "yourTableName"});
    var cols = con.GetSchema("Columns", new string[] {null, null, "yourTableName"});
}

GetSchema 方法的此重载接受一个字符串数组,表示返回数据的限制
您可以在 MSDN Schema Restrictions

上的这篇文章中了解有关 restrictions 参数值的更多信息

【讨论】:

  • 但是具体的数据库在哪里输入呢?
  • 这是在连接字符串中指定的。这里省略了,因为我没有详细信息,但应该写成替换 using 语句中的点
  • 但是我没有使用该数据库的经验,所以也许应该使用 CATALOG 的限制来指定它(参见上面发布的链接)
猜你喜欢
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 2017-11-02
相关资源
最近更新 更多