我想知道如何获取数据库表的列并将它们存储在字符串或字符串数组中。我有以下代码,但我相信它不起作用。我正在使用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
。顺便说一下,列是一个文本框。
答案 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))是抛出类型 或命名空间无法找到
我可以发誓我见过MySqlCommand
和MySqlConnection
。所以你使用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