2

我正在使用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 Table”

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

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

4

2 回答 2

1

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

SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
于 2012-12-14T11:46:26.670 回答
1

如果您只想获取表格,那么您将需要限制模式。因为Table支持四个限制:(1) Catalog、(2) Owner、(3) Table和 (4) TableType

GetSchema (string collectionName, string[] restrictionValues);

所以你可以写成:

var tables = sqlConn.GetSchema("Tables", new string[] { null, null, null, "BASE TABLE" });
于 2019-04-04T05:20:23.687 回答