【问题标题】:.NET MySQL Data Reader Select Function?.NET MySQL 数据读取器选择功能?
【发布时间】:2013-01-28 19:06:50
【问题描述】:

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

我的理解是,阅读器上循环的每次迭代都是下一行,GetString(x) 返回“x”的列值作为索引。我发现的所有示例都知道他们需要的行/列名称。如何通过“SELECT * FROM”调用执行此操作并保存列名/值以供以后访问? Microsoft 似乎有一个“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();
    }
}

【问题讨论】:

    标签: c# .net mysql select sqldatareader


    【解决方案1】:

    您可以使用DbDataReader.GetName 来获取给定序号x 的列的名称。

    【讨论】:

    • 感谢您的帮助。我想我的问题有点令人困惑。我想问的是如何存储这些数据的最佳方式(列表/字典/二维数组/等)以便于参考?
    • @BrettPowell:具体是什么数据?列名?
    • 只有列名和每行的值。我基本上需要从 sqlite 中获取一个值并检查它是否与 mysql 中特定列中的任何值匹配。
    • @BrettPowell:我真的不知道,这取决于很多事情。一般来说,如果数据集很大,将所有数据拉入内存可能不是一个好主意。否则,您可以将它们放入例如一个List&lt;object[]&gt;,因为有一个GetValues 方法可以提供一个object[]
    【解决方案2】:

    使用“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();

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

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

    String firstProductName = products[0].name;

    希望对你有帮助。

    【讨论】:

    • 谢谢,虽然这个项目现在已经快完成了,而且切换到那个似乎相当复杂。不过答案很好:)
    • 没问题。我还想说一件事。当我开始使用 C# 和 .NET 时,我也在手动编写 sql 查询,并使用 DataReader 将数据传输到 .NET 中的可用对象,但有一天我为自己找到了 EntityFramework 和 Linq。现在,如果没有这些技术,我什至无法期待我的生活。你应该尝试一次。无论如何,我很高兴你喜欢我的回答。
    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多