0

自从我使用 .NET 以来已经有很长时间了,但幸运的是,我几乎完成了编写一个比较 sqlite 和 mysql 数据库的工具。我在尝试为我的包装器编写一个处理 SELECT 调用的函数时遇到了一个问题,因为我无法完全弄清楚数据读取器。

我的理解是,阅读器上循环的每次迭代都是下一行,GetString(x) 返回“x”的列值作为索引。我发现的所有示例都知道他们需要的行/列名称。如何通过“SELECT * FROM”调用执行此操作并保存列名/值以供以后访问?微软似乎有一个“FieldCount”功能,但我在 MySQL 连接器上是空的。

谢谢!

public void Query(string query, string tableName)
{
    //Open connection
    if (this.OpenConnection() == true)
    {
        //Create Command
        MySqlCommand cmd = new MySqlCommand(query, connection);
        MySqlDataReader dataReader = cmd.ExecuteReader();

        //Read the data and store them in the list
        while (dataReader.Read())
        {
            int count = Count(tableName);

            for (int x = 0; x < count; x++)
            {
                Console.WriteLine(dataReader.GetString(count));
            }
        }

        //close Data Reader
        dataReader.Close();

        //close Connection
        this.CloseConnection();
    }
}
4

2 回答 2

1

您可以使用它DbDataReader.GetName来获取给定其 ordinal 的列的名称x

于 2013-02-13T09:24:57.790 回答
0

使用“mysql 连接器”访问 MySql 中的数据,然后自己编写查询更简单:http: //dev.mysql.com/downloads/connector/net/

然后使用 EntityFramework 通过此连接器访问数据。您还可以从 mysql 中的现有数据库自动生成 *.edmx 模型,这将让您快速访问和使用数据库中的数据。以下是有关从现有数据库添加 *.edmx 模型的信息:http: //msdn.microsoft.com/en-us/library/vstudio/cc716703 (v=vs.100).aspx

将从表中选择所有数据的查询,例如“产品”将如下所示:

列出产品 = dbContext.Products.Where(e=>e.ProductId!=-1).ToList();

这将在表 Products 中返回数据库中的整个产品列表。

然后您可以根据需要使用产品。例如,为“产品”中的第一个产品取“名称”列将如下所示:

字符串 firstProductName = products[0].name;

我希望它有所帮助。

于 2013-02-13T09:35:50.563 回答