获取表的列名并将其存储在字符串或var c#asp.net中

时间:2013-06-27 21:00:10

标签: c# asp.net sql-server

我想知道如何获取数据库表的列并将它们存储在字符串或字符串数​​组中。我有以下代码,但我相信它不起作用。我正在使用asp.net中给出的默认表。我已经能够写这个表没问题,但我无法弄清楚如何从中选择并保存检索到的值。这是我在我的代码背后的内容

    string connection = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
    SqlConnection conn = null;
    conn = new SqlConnection(connection);
    conn.Open();
    using (SqlCommand cmd = new SqlCommand())
    {

        string query = String.Format("SELECT column_name FROM USER_TAB_COLUMN WHERE table_name = 'TestTable'");
        cmd.Connection = conn;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = query;
        columns.Text = cmd.ExecuteNonQuery().ToString();
        conn.Close();
    }

错误为Invalid object name 'USER_TAB_COLUMN'。我尝试删除此内容并使用"SELECT column_name FROM TestTable"然后抱怨column_name。顺便说一下,列是一个文本框。

4 个答案:

答案 0 :(得分:10)

您可以使用DbDateReader.GetSchemaTable

DataTable schema = null;
using (var con = new MySql.Data.MySqlClient.MySqlConnection(connection))
{
    using (var schemaCommand = new MySql.Data.MySqlClient.MySqlCommand("SELECT * FROM TestTable", con))
    {
        con.Open();
        using (var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly))
        {
            schema = reader.GetSchemaTable();
        }
    }
}
foreach (DataRow col in schema.Rows)
{
    Console.WriteLine("ColumnName={0}", col.Field<String>("ColumnName"));
}

列名称位于每行的第一列。


  

我正在尝试你的方法但是   MySql.Data.MySqlClient.MySqlConnection(connection))是抛出类型   或命名空间无法找到

我可以发誓我见过MySqlCommandMySqlConnection。所以你使用SQL-Server作为rdbms?

using (var con = new SqlConnection(connection))
{
    using (var schemaCommand = new SqlCommand("SELECT * FROM TestTable;", con))
    {
        con.Open();
        using (var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly))
        {
            schema = reader.GetSchemaTable();
        }
    }
}
// DataTable part is the same

答案 1 :(得分:1)

除非您已定义它,否则USER_TAB_COLUMN不是MySQL中的表或视图。

要获取列名,请查询information_schema.columns视图。

e.g。

获取foo.bar表中的列名列表:

SELECT column_name 
  FROM information_schema.columns
 WHERE table_schema = 'foo'
   AND table_name = 'bar'

(由于同一个table_name可以出现在多个数据库中,为了确保您从单个表中获取列名,您需要指定该表所在的数据库。这样还可以提高查询的效率,如果您拥有大量数据库,因为它限制了MySQL需要检查的数据库。)

要检查“当前”数据库中表的列,可以使用DATABASE()函数:

SELECT column_name 
  FROM information_schema.columns
 WHERE table_schema = DATABASE()
   AND table_name = 'bar'

(这将是当前数据库连接中SELECT * FROM bar引用的表。)

答案 2 :(得分:0)

我将向您展示如何使用MySQL数据库表。类似的代码结构也可用于您的案例。 基本上你应该运行“DESC table_name”查询。然后,您将表描述作为结果表。您可以读取dataReader并从表描述中检索任何信息。在此示例中,我检索特定DB表的列名称。希望这会节省一些人的时间。 :)快乐的编码!

 var tableDesc = "DESC table_name";

        try
        {
            Mclient.MySqlCommand tableDescCmd = new Mclient.MySqlCommand(tableDesc, mCon);
            Mclient.MySqlDataReader tableDescDR = tableDescCmd.ExecuteReader();

            while (tableDescDR.Read())
            {

                searchFields.Items.Add(tableDescDR.GetFieldValue<String>(tableDescDR.GetOrdinal("Field")));
            }

            tableDescDR.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Could not retrieve DB Table fields.\n" + ex.Message);
        }

答案 3 :(得分:0)

IIO_CHAN_INFO_RAW