C #: это правильный способ использовать SqlDataReader для DAAB - PullRequest
1 голос
/ 06 апреля 2010

Я только что начал использовать блок приложения доступа к данным от Microsoft. Есть очень мало инструкций о том, как правильно использовать библиотеку. Просто хотел узнать, правильный ли это способ чтения данных.

SqlDataReader reader = SqlHelper.ExecuteReader(config.ConnectionString, CommandType.Text, "select * from category");
List<string> a = new List<string>();
using (reader)
{
     while (reader.Read())
     {
          string t = reader.GetString(1);
          a.Add(t);
     }

     return a;
}

все будет закрыто, если это будет так? Есть ли вероятность утечки памяти?

Ответы [ 2 ]

2 голосов
/ 06 апреля 2010

Поместите инициализацию вашего читателя в блок using, и я бы не стал использовать номера столбцов, если вы можете, так как они по сути превращаются в магические числа. К сожалению, для этого просто необходимо использовать имена столбцов, но я обнаружил, что имена столбцов с меньшей вероятностью изменятся, чем смещения столбцов, и вы всегда можете поместить имена столбцов в файл конфигурации или что-то в этом роде. Кроме того, убедитесь, что вы принимаете во внимание возможность для пустых столбцов

using(var reader = SqlHelper.ExecuteReader(etc. etc. etc.))
{
    while(reader.read()){
    {
        //Only need to do this if you don't want your string to be null
        //and if the "columnName" column is nullable.
        var stringValue = reader.IsDBNull(reader.GetOrdinal("columnName") 
                        ? "" 
                        : reader.GetString(reader.GetOrdinal("columnName"));
        a.Add(stringValue);
    }
}
0 голосов
/ 06 апреля 2010
...