我想在我的C#应用程序中获取所有SQL Server数据库表的名称.可能吗?Plz告诉我解决方案.
slu*_*ter 56
这很简单:
DataTable t = _conn.GetSchema("Tables");
Run Code Online (Sandbox Code Playgroud)
其中_conn是已连接到正确数据库的SqlConnection对象.
yon*_*bat 26
另一个解决方案:
public IList<string> ListTables()
{
List<string> tables = new List<string>();
DataTable dt = _connection.GetSchema("Tables");
foreach (DataRow row in dt.Rows)
{
string tablename = (string)row[2];
tables.Add(tablename);
}
return tables;
}
Run Code Online (Sandbox Code Playgroud)
我用这ExtensionMethod对SqlConnection:
public static List<string> GetTableNames(this SqlConnection connection)
{
using(SqlConnection conn = connection)
{
if(conn.State == ConnectionState.Open)
{
return conn.GetSchema("Tables").AsEnumerable().Select(s => s[2].ToString()).ToList();
}
}
//Add some error-handling instead !
return new List<string>();
}
Run Code Online (Sandbox Code Playgroud)
如果要从数据库中获取所有表名,可以执行以下操作:
string[] GetAllTables(SqlConnection connection)
{
List<string> result = new List<string>();
SqlCommand cmd = new SqlCommand("SELECT name FROM sys.Tables", connection);
System.Data.SqlClient.SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
result.Add(reader["name"].ToString());
return result.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
使用另一个响应获取所有数据库,并创建每个数据库的连接,然后使用函数“ GetAllTables”从该数据库获取所有表名。
但是值得一提的另一种方式:Microsoft.SqlServer.Smo.dll中包含的API非常适合访问数据库:
private IEnumerable<string> getAllTables()
{
var sqlConnection = new System.Data.SqlClient.SqlConnection(connectionString);
var serverConnection = new Microsoft.SqlServer.Management.Common.ServerConnection(sqlConnection);
var server = new Microsoft.SqlServer.Management.Smo.Server(serverConnection);
var database = server.Databases[databaseName];
foreach (Microsoft.SqlServer.Management.Smo.Table table in database.Tables)
{
yield return table.Name;
}
}
Run Code Online (Sandbox Code Playgroud)
最酷的事情是Microsoft.SqlServer.Management.Smo.Table对象允许您执行各种操作,例如更改架构,脚本等。