返回所有行和列

时间:2012-02-01 15:27:58

标签: c# .net mysql winforms

我正在研究一个基本的mysql数据库类,它有几个函数。其中一个函数应返回所有行和列的列表。代码正在运行,它非常动态,但它看起来也可以改进。我希望有人可以看看这段代码并告诉我是否还有其他解决办法吗?

我尝试的其他解决方案之一是没有列表,但它涉及为必须返回的每一行重新创建一个数组,所以我放弃了它并转移到列表。

    public List<object[]> ReadAllRows(string sQuery)
    {
        List<object[]> oResults = new List<object[]>();

        try
        {
            MySqlCommand msCommand = new MySqlCommand
            {
                CommandText = sQuery,
                Connection = Connection
            };

            using (MySqlDataReader msReader = msCommand.ExecuteReader())
            {
                if(!msReader.HasRows)
                    return EmptyList;

                while (msReader.Read())
                {
                    object[] oRowValues = new object[msReader.FieldCount];
                    {
                        msReader.GetValues(oRowValues);
                    }

                    oResults.Add(new object[] { oRowValues });
                }
            }
        }
        catch (MySqlException ex)
        {
            LastError = "Error: " + ex;
            return EmptyList;
        }

        return oResults;
    }

如果有任何问题,请随时提出

3 个答案:

答案 0 :(得分:3)

我强烈建议不要这样做。

首先,只要执行命令,就应该保持连接打开状态。此外,MySqlCommand实现了IDisposable,因此应该包含在using子句中。

我建议反对它的一个原因是已经涵盖了此功能。一种简单的方法是让您的方法只返回一个DataTable。 DataTables将为您提供您需要的所有信息(数据类型,行,列等),而您的信息非常有限。

另一个原因与维持开放连接有关:坏主意。连接池将非常快速地处理打开/关闭连接,因此没有必要。此外,如果您的应用程序崩溃,那么您将会泄漏连接。在某些时候,你最终会得到很好的小数据库错误。

答案 1 :(得分:2)

.NET DataTable是DataRows的集合,每个DataRow都有一个Object数组ItemArray

DataTable GetTable()
  {
    try
    {
        string query = "select * from items";
        MySqlDataAdapter adapter = new MySqlDataAdapter(query, connection);
        DataSet DS = new DataSet();
        adapter.Fill(DS);
        return DS.Tables[0];
    }
}

答案 2 :(得分:1)

当您获得DataSet时,您可以使用DataRowCollection轻松访问任何指定表的行:

DataRowCollection drc = dataSet.Tables["tableName"].Rows;

而不是tableName我们也可以编写表索引,但是当我们从数据库索引添加或删除表时,它不会被推荐。这些操作后名称仍然相同。