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

问题描述 投票:2回答:2

我使用的是VS2010,.Net 4.0,MS SQL SERVER 2008。

我以为我知道如何从数据库中获取所有表名。但是我错了。使用表名,我可以获得视图名称。但是当我为Views做的时候,我只是得到了Views。我不知道为什么会这样。

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

    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中,Views的table_type显示“View”,对于表显示“Base Table”。

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

这有什么问题?我怎么能解决这个问题?

c# sqlconnection getschematable
2个回答
1
投票

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

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

1
投票

如果您只想获取表,那么您将需要限制模式。对于Table,支持四种限制:(1)目录,(2)所有者,(3)表和(4)TableType。

GetSchema (string collectionName, string[] restrictionValues);

所以你可以这样写:

var tables = sqlConn.GetSchema("Tables", new string[] { null, null, null, "BASE TABLE" });
© www.soinside.com 2019 - 2024. All rights reserved.