C# 从服务器C上的特定数据库检索表列表#

C# 从服务器C上的特定数据库检索表列表#,c#,sql,syntax,C#,Sql,Syntax,寻找一些可以从服务器上的特定数据库检索表名的C#示例。我已经有了一个有效的连接字符串,只是在寻找将每个表的名称添加到列表中以供以后检索和操作的正确方法。我认为此SQL应该返回一个包含数据库中表名的表: SELECT * FROM information_schema.tables 对于SQL Server 2005及更高版本: using (SqlConnection connection = new SqlConnection(@"Data Source=(local);Integrated

寻找一些可以从服务器上的特定数据库检索表名的C#示例。我已经有了一个有效的连接字符串,只是在寻找将每个表的名称添加到列表中以供以后检索和操作的正确方法。

我认为此SQL应该返回一个包含数据库中表名的表:

SELECT * FROM information_schema.tables

对于SQL Server 2005及更高版本:

using (SqlConnection connection = new SqlConnection(@"Data Source=(local);Integrated Security=True;Initial Catalog=DB_Name;")) {
    connection.Open();

    using (SqlCommand command = connection.CreateCommand()) {
        command.CommandText =
            @"SELECT s.name, o.name
            FROM sys.objects o WITH(NOLOCK)
            JOIN sys.schemas s WITH(NOLOCK)
            ON o.schema_id = s.schema_id
            WHERE o.is_ms_shipped = 0 AND RTRIM(o.type) = 'U'
            ORDER BY s.name ASC, o.name ASC";

        using (SqlDataReader reader = command.ExecuteReader()) {
            while (reader.Read()) {
                string schemaName = reader.GetString(0);
                string tableName = reader.GetString(1);

                // your code goes here...
            }
        }
    }
}

System.Data.SqlClient
不需要对sys.Tables进行正式查询,就可以满足您的需要(尽管这是它在后台使用的)。在
SqlConnection
对象上使用
GetSchema()
方法,并指定您想要“表”,它将向您发送一个
DataTable
对象,每个表都有一行。它发回每行中的数据库名称、表模式名称、表名称和表类型(按该列顺序)。代码如下所示:

public static List<string> GetTables(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        DataTable schema = connection.GetSchema("Tables");
        List<string> TableNames = new List<string>();
        foreach (DataRow row in schema.Rows)
        {
            TableNames.Add(row[2].ToString());
        }
        return TableNames;
    }
}
公共静态列表GetTables(字符串连接字符串)
{
使用(SqlConnection连接=新的SqlConnection(connectionString))
{
connection.Open();
DataTableSchema=connection.GetSchema(“表”);
List TableNames=新列表();
foreach(schema.Rows中的数据行)
{
TableNames.Add(行[2].ToString());
}
返回表名;
}
}

要从数据库(SQlServer)中获取所有用户定义的表,我们必须查询系统目录

SELECT  Name from Sysobjects where xtype = 'u' 
此查询将返回数据库中所有用户定义的表

此我的解决方案:

    public void opencon()
    {
        if (conn == null)
        {
            conn = new SqlConnection(@"Your connection");
        }
        if (conn.State == ConnectionState.Closed)
        {
            conn.Open();
        }
    }
    public void Closecon()
    {
        if ((conn != null) && (conn.State == ConnectionState.Open))
        {
            conn.Close();
        }
    }
   public void GetTables(ComboBox cb)
    {
            chuoiketnoi();
            DataTable schema = conn.GetSchema("Tables");
            foreach (DataRow row in schema.Rows)
            {
                cb.Items.Add(row[2].ToString());
            }
            dongketnoi();
    }

既然您已经有了SqlConnection,为什么不使用.GetSchema(“Tables”)?连接被包装在一个using块中,因此一旦代码退出block.chuoiketnoi,连接就会关闭?东克诺伊?