我尝试获取所有数据库的所有表名。 但GetSchema(“Tables”)仅返回一个db的名称。 这很奇怪,因为我没有使用任何限制,并且在具有读/写权限的许多dbs上使用dbowner。
获取所有表信息需要什么?
答案 0 :(得分:1)
它只返回当前上下文数据库中的表列表。 要获取所有表的列表,您需要遍历每个数据库。
我在我的一个开源项目中使用过它 - http://dbdoc.codeplex.com
你必须做这样的事情:
foreach (Microsoft.SqlServer.Management.Smo.Database db in server.Databases)
foreach (Microsoft.SqlServer.Management.Smo.Table tbl in db.Tables)
tables.Add(tbl.Name); // Temp variable
答案 1 :(得分:1)
我是这样做的:
Cursor.Current = Cursors.WaitCursor;
sqlConnection.Open();
System.Data.DataTable dataTable = sqlConnection.GetSchema("Databases");
foreach (System.Data.DataRow row in dataTable.Rows)
{
using (var tablesConnection = new System.Data.SqlClient.SqlConnection())
{
var dbName = row[0] as string;
try
{
sqlConnection.ChangeDatabase(dbName);
}
catch (Exception)
{
continue;
}
var tables = sqlConnection.GetSchema("Tables");
}
真正的问题是,即使初始目录未明确指定,也会分配默认数据库。因此,应该为服务器上的每个数据库调用GetSchema(“Tables”)。 它可能是其他数据库,不一定是“主”。 我认为GetSchema(“Tables”)返回所有数据库的所有表。