簡體   English   中英

獲取表的列名並將它們存儲在字符串或 var c# asp.net

[英]Get the column names of a table and store them in a string or var c# asp.net

我想知道如何獲取數據庫表的列並將它們中的每一個存儲在字符串或字符串數​​組中。 我有以下代碼,但我相信它不起作用。 我正在使用 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 順便說一下,列是一個文本框。

您可以使用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

非常簡單,U可以像下面的代碼那樣做。

DataTable table = new DataTable();
foreach (DataColumn column in table .Columns)
{
    Console.Write("Item: ");
    Console.Write(column.ColumnName);
    Console.Write(" ");
    Console.WriteLine(row[column]);
}

除非您已定義它,否則USER_TAB_COLUMN不是MySQL中的表或視圖。

要獲取列名,請查詢information_schema.columns視圖。

例如

獲取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引用的表。)

我將向您展示如何使用MySQL數據庫表。 類似的代碼結構也可以用於您的情況。 基本上,您應該運行“ DESC table_name”查詢。 然后,您將得到一個表描述作為結果表。 您可以讀取dataReader並檢索從表說明中歸檔的任何信息。 在此示例中,我檢索特定數據庫表的列名。 希望這可以節省別人的時間。 :)編碼愉快!

 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);
        }

除了先前的答案,這是另一種方式。 對我來說,它比DataReader的替代品運行速度更快(不多)。 “ WHERE FALSE”指示不攜帶任何數據。

請注意,無需迭代DataTable.Rows,因為結果DataTable已經描述了目標表的架構(請參閱DataTable.Columns),而不是當前DataReader結果的架構

DataTable GetDataTableScheme(string tableName)
{
    var table = new DataTable();

    using (var connection = new MySqlConnection(*[ConnectionString]*))
    using (var dataAdapter = new MySqlDataAdapter($"SELECT * FROM {tableName} WHERE FALSE", connection))
    {
        // Adds additional info, like auto-increment
        dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

        dataAdapter.Fill(table);
    }

    return table;
}
private void leavestat()
    {
        if (conn.State == ConnectionState.Closed)
        {
            conn.Open();
        }

        string query = "SELECT * FROM leaverecord";
        MySqlCommand cmd = new MySqlCommand(query, conn);
        MySqlDataAdapter da = new MySqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);

        for (int i = 0; i < dt.Columns.Count; i++)
        {
             listBox1.Items.Add(dt.Columns[i].ToString());
        }
            conn.Close();
    }

您可以使用 MySqlDataReader 和 GetSchemaTable 獲取列名。 不僅是列名,您幾乎可以訪問表的所有信息。

代碼也非常簡單易懂。

string query = String.Format("SELECT * FROM testTable");
MySqlConnection conn = new MySqlConnection(strCon);
MySqlCommand cmd = new MySqlCommand(query, conn);
conn.Open();
MySqlDataReader rdr = cmd.ExecuteReader();
DataTable schema = rdr.GetSchemaTable();
conn.Close();

foreach (DataRow rdrColumn in schema.Rows)
{
    String columnName = rdrColumn[schema.Columns["ColumnName"]].ToString();
    String dataType = rdrColumn[schema.Columns["DataType"]].ToString();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM