我可以在C#应用程序中获取SQL Server数据库的所有表的名称吗?

Gov*_*iya 30 c# sql-server

我想在我的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)

  • 你见过高弹回答吗? (7认同)

dno*_*lan 8

运行sql命令:

SELECT name FROM sysobjects WHERE xtype = 'U'
Run Code Online (Sandbox Code Playgroud)


Fel*_* D. 6

我用这ExtensionMethodSqlConnection

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)


Man*_*anu 5

如果要从数据库中获取所有表名,可以执行以下操作:

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”从该数据库获取所有表名。


Mal*_*nis 5

但是值得一提的另一种方式: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对象允许您执行各种操作,例如更改架构,脚本等。