使用c#获取数据库中的所有表名

Posted

技术标签:

【中文标题】使用c#获取数据库中的所有表名【英文标题】:Getting all Table name in a database with c# 【发布时间】:2012-12-14 11:43:18 【问题描述】:

我正在使用 VS2010、.Net 4.0、MS SQL SERVER 2008

我以为我知道如何从数据库中获取所有表名。但是我错了。有了表名,我也得到了视图名。但是当我为视图做这件事时,我只得到视图。我不知道为什么会这样。

这是我的代码,我尝试过的:

    public DataTable getAllTables(string serverName, string dbName, string authenticationType, string Login, string pass)
    
        using (SqlConnection sqlConn = Return_Conn(serverName, dbName, authenticationType, Login, pass))
        
            sqlConn.Open();
            DataTable dt = sqlConn.GetSchema("Tables");
            DataTable dt1 = new DataTable();

            string[] column =  "TABLE_NAME" ;
            dt1 = dt.DefaultView.ToTable("dd", false, column);

            sqlConn.Close();
            return dt1;
        
    

    public DataTable getAllViews(string serverName, string dbName, string authenticationType, string Login, string pass)
    
        using (SqlConnection sqlConn = Return_Conn(serverName, dbName, authenticationType, Login, pass))
        
            sqlConn.Open();
            DataTable dt = sqlConn.GetSchema("Views");
            DataTable dt1 = new DataTable();

            string[] column =  "TABLE_NAME" ;
            dt1 = dt.DefaultView.ToTable("dd", false, column);

            sqlConn.Close();
            return dt1;
        
    

DataTable dt = sqlConn.GetSchema("Tables"); 这一行中,dt 包含所有表格以及视图。在 dt 中,Viewstable_type 显示 "View" 和 table,显示 "Base表”

但在DataTable dt = sqlConn.GetSchema("Views");这一行中,dt只包含视图。

这里出了什么问题?我该如何解决?

【问题讨论】:

可能重复查询How to get all tables of a MSSQL-Database? @spajce 我不是要求不同的解决方案。我在问如何解决我写的问题。它不在重复列表中。 好的..所以,链接中有一个简单的解决方案:) 你建议哪一个?我的做法与最佳答案相同,其余两个略有不同。我不想写直接查询。 :) 如果是这样.. 为什么会这样? :) 【参考方案1】:

我会运行这样的查询而不是 GetSchema:

SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'

【讨论】:

谢谢,我知道了。但我写的有什么问题?【参考方案2】:

如果您只想获取表格,则需要限制架构。对于Table,支持四个限制:(1)Catalog、(2)Owner、(3)Table 和 (4) 表格类型

GetSchema (string collectionName, string[] restrictionValues);

所以你可以写成:

var tables = sqlConn.GetSchema("Tables", new string[]  null, null, null, "BASE TABLE" );

【讨论】:

这里是相关文档:docs.microsoft.com/en-us/dotnet/framework/data/adonet/…。引用:"TABLE_TYPE,字符串,表的类型。可以是VIEWBASE TABLE。"

以上是关于使用c#获取数据库中的所有表名的主要内容,如果未能解决你的问题,请参考以下文章

WinForm杂记:C#操作SQLite数据库(总结)

如何获取android sqlite数据库中的所有表名?

MS SQL 2008 - 获取数据库中的所有表名及其行数

怎么用SQL语句获取指定数据库中的所有表名

如何从数据库中获取所有表名?

C#中查询数据库中表的信息的语句怎么写