我想在我的C#应用程序中获取所有SQL Server数据库表的名称.可能吗?Plz告诉我解决方案.
这很简单:
DataTable t = _conn.GetSchema("Tables");
其中_conn
是已连接到正确数据库的SqlConnection对象.
另一个解决方案:
public IListListTables() { List tables = new List (); DataTable dt = _connection.GetSchema("Tables"); foreach (DataRow row in dt.Rows) { string tablename = (string)row[2]; tables.Add(tablename); } return tables; }
运行sql命令:
SELECT name FROM sysobjects WHERE xtype = 'U'
如果要从数据库中获取所有表名,可以执行以下操作:
string[] GetAllTables(SqlConnection connection) { Listresult = new List (); 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(); }
使用另一个响应获取所有数据库,并创建每个数据库的连接,然后使用函数“ GetAllTables”从该数据库获取所有表名。
但是值得一提的另一种方式:Microsoft.SqlServer.Smo.dll中包含的API非常适合访问数据库:
private IEnumerablegetAllTables() { 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; } }
最酷的事情是Microsoft.SqlServer.Management.Smo.Table对象允许您执行各种操作,例如更改架构,脚本等。