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 では、 Views のtable_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 に答える