我正在使用 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中,视图的 table_type 显示“查看”,表显示视图表“即可。
但在 DataTable dt = sqlConn.GetSchema("Views");
此行中, dt 仅包含视图。
这里有什么问题?我怎么解决这个问题?
答案 0 :(得分:1)
我会运行这样的查询而不是GetSchema:
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
答案 1 :(得分:1)
如果您只想获取表,则需要限制架构。对于Table
,支持四个限制:(1)目录,(2)所有者,(3)表格和( 4) TableType 。
GetSchema (string collectionName, string[] restrictionValues);
因此您可以编写为:
var tables = sqlConn.GetSchema("Tables", new string[] { null, null, null, "BASE TABLE" });