好日子先生和女士。我打算获取所有行标题,如“column_id和first_name,last_name等”,并使用mysql数据库表中的行标题填充我的列表框。请赐教我怎么做。我不知道如何使用MySqlDataAdapter或MySqlDataReader。我是初学者,愿意学习。
using (MySqlConnection conns2 = new MySqlConnection(connString))
{
conns2.Open();
MySqlCommand comm2 = new MySqlCommand("SELECT * FROM table1",
conns2);
MySqlDataAdapter add2 = new MySqlDataAdapter(comm2);
DataTable dt2 = new DataTable();
add2.Fill(dt2);
foreach(DataColumn column in dt2.Columns)
{
columnlistbox.Items.Add(dt2.Columns);
//it shows "collection" and exactly the number of row header
//but it doesn't show like "First name, client_id and last
//name"
}
conns2.Close();
}
答案 0 :(得分:1)
如果您需要数据库中的数据,并将其加载到DataTable中(使用DbDataAdapter或DbDataReader),您可以从DataTable.Columns集合属性中了解列名称:
foreach (DataColumn col in dt2.Columns)
columnlistbox.Items.Add(col.ColumnName);
但如果您不需要来自数据库的任何数据,只需要其结构,则可以使用DbDataReader。为了由读者加载这些数据,必须对查询进行模拟"到数据库:
using (MySqlConnection conns2 = new MySqlConnection(connString))
{
conns2.Open();
MySqlCommand comm2 = new MySqlCommand("SELECT * FROM table1", conns2);
using (var reader = MySqlCommand.ExecuteReader(CommandBehavior.SchemaOnly))
{
reader.Read();
var dtSchema = reader.GetSchemaTable();
foreach (DataRow row in tableSchema.Rows)
columnlistbox.Items.Add(row["ColumnName"]);
}
}
答案 1 :(得分:0)
使用MySqlDataAdapter
是基于您提供的示例代码的合适选择,因为您正在填充DataTable,而在ADO.NET中,DataAdapter传统上用于填充DataTable。 DataAdapter填充或“填充”您的DataTable对象。
您还可以使用DataReader填充DataTable:
var dataReader = cmd.ExecuteReader();
var dataTable = new DataTable();
dataTable.Load(dataReader);
DataAdapters和DataReader是ADO.NET的核心设计概念,无论是使用Sql Server还是MySQL数据库。 DataReader是一个前向,轻量级和更快的数据库查询助手。 DataAdapter比DataReader重一点,并且比DataReader做的更多,DataAdapter可能在后台使用DataReader。
以下是如何使用MySQL数据库中的数据,您需要使用DataGrid,而不是ListBox
using (MySqlConnection conn = new MySqlConnection(connString))
{
conn.Open();
MySqlCommand cmd = new MySqlCommand("SELECT * FROM table1",
conn);
MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
DataTable dt = new DataTable();
adapter.Fill(dt);
//display your dataset in a ASP.NET Web Forms DataGrid
dataGrid.DataSource = dt;
dataGrid.DataBind();
//conn.Close();// you do not need this, your using statements call Dispose and Dispose will release the connection back to the connection pool
}
答案 2 :(得分:0)
您可以从此代码中获取指针。总之,GetName
正是您所寻找的。 p>
using (Common.DbCommand cmd = conn.CreateCommand()) {
cmd.CommandText = "SELECT * FROM table1";
dynamic dr = cmd.ExecuteReader();
int index = 0;
List<string> columns = new List<string>();
for (index = 0; index <= dr.FieldCount - 1; index++) {
columns.Add(dr.GetName(index));
}
}