获取表的列名并将其存储在字符串或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("ColumnName")); } 

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


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

我本可以发誓我已经看过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 

非常简单你可以像下面的代码那样做..

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