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

C# 使用c获取数据库中的所有表名#,c#,sqlconnection,getschematable,C#,Sqlconnection,Getschematable,我正在使用VS2010、.Net 4.0、MS SQL SERVER 2008 GetSchema (string collectionName, string[] restrictionValues); 我想我知道如何从数据库中获取所有表名。但我错了。对于表名,我还可以得到视图名。但当我为视图做这些时,我只得到视图。我不知道为什么会这样 这是我的代码,我已经尝试过了: public DataTable getAllTables(string serverName, string db

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

GetSchema (string collectionName, string[] restrictionValues);
我想我知道如何从数据库中获取所有表名。但我错了。对于表名,我还可以得到视图名。但当我为视图做这些时,我只得到视图。我不知道为什么会这样

这是我的代码,我已经尝试过了:

    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;
        }
    }
数据表dt=sqlConn.GetSchema(“表”)此行,dt包含所有表和视图。在dt中,视图的表格类型显示“视图”,而表格的显示“基表”

GetSchema (string collectionName, string[] restrictionValues);
但是在
数据表dt=sqlConn.GetSchema(“视图”)此行,dt仅包含视图


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

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

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

如果只想获取表,则需要限制模式。对于
,支持四个限制:(1)目录,(2)所有者,(3),以及(4)表类型

GetSchema (string collectionName, string[] restrictionValues);
所以你可以这样写:

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

谢谢,我知道。但我写的有什么不对?可能重复的query@spajce我并不是在要求一个不同的解决方案。我在问如何解决我写的问题。它不在重复列表中。好的。。因此,链接中有一个简单的解决方案:)你建议哪一个?我做的和上面的答案一样,剩下的两个也没什么不同。我不想写直接询问。:)如果是的话。。为什么会发生这种情况?:)以下是相关文档:。Quote:“表类型、字符串、表类型。可以是视图或基表。”