Возврат всех строк и столбцов - PullRequest
0 голосов
/ 01 февраля 2012

Я работаю над базовым классом базы данных 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 ]

3 голосов
/ 01 февраля 2012

Я бы настоятельно рекомендовал не делать этого.

Прежде всего, вы должны держать соединение открытым только столько времени, сколько требуется для выполнения команды.Кроме того, MySqlCommand реализует IDisposable, поэтому его следует заключить в условие использования.

Одна из причин, по которой я рекомендую это сделать, заключается в том, что эта функциональность уже включена.Простой способ состоит в том, чтобы ваши методы просто возвращали DataTable.DataTables предоставит вам всю необходимую информацию (тип данных, строки, столбцы и т. Д.), В то время как ваши очень ограничены.

Другая причина связана с поддержанием открытого соединения: плохая идея,Пул соединений будет очень быстро открывать / закрывать соединения, так что в этом нет необходимости.Кроме того, в случае сбоя вашего приложения вы будете пропускать соединения.В какой-то момент вы получите прекрасные маленькие ошибки базы данных.

2 голосов
/ 01 февраля 2012

.NET DataTable представляет собой набор DataRows, и каждый DataRow имеет массив объектов 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];
    }
}
1 голос
/ 01 февраля 2012

Получив DataSet, вы можете легко получить доступ к строкам любой указанной таблицы, используя DataRowCollection:

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

вместо tableName, мы можем также написать индекс таблицы, но это не рекомендуется, когда мыдобавить или удалить таблицы из индексов базы данных изменится.Имена останутся такими же после этих операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...