Как обрабатывать сценарий с несколькими строками в SqlDataReader? - PullRequest
1 голос
/ 23 апреля 2020

У меня есть запрос SQL, который supposed возвращает только ONE строку из бизнес-базы данных. Исходя из этого, я написал следующее sql script, чтобы получить данные из набора результатов.

string query = @"select 
ProdMaster.data_Id Id,
ProdMaster.data_name Name,
ProdMaster.data_countryname CountryName
from RM.Db
order by ProdMaster.data.FromDate desc"

SqlCommand command = new SqlCommand(query, conn);
using (SqlDataReader reader = command.ExecuteReader())
{
 if (reader.Read()) 
   {                            
      countryname = reader["CountryName"].ToString(); 
   }
}

Но в базе данных есть проблемы с данными, иногда она возвращает несколько строк.

Как мы проверяем строку count? Если строк больше одной, мы хотим вернуть пользовательское исключение.

Примечание :

  • Я не хочу использовать COUNT (*) в запросе.
  • У нас нет контроля над RM.Db базой данных - могут возникнуть проблемы с данными (третьи лица)

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Не считаете ли вы следующий подход к решению вашей проблемы:

SqlCommand command = new SqlCommand(query, conn);
using (SqlDataReader reader = command.ExecuteReader())
{
    if (reader.Read()) 
    {                            
        countryname = reader["CountryName"].ToString(); 
    }

    // Try to read the second row.
    if (reader.Read())
    {
        // If we are inside this if-statement then it means that the query has returned more than one row.
        // Here a custom exception must be thrown.
    }
}
1 голос
/ 23 апреля 2020

Вместо этого можно использовать SqlDataAdapter и заполнить содержимое таблицы в наборе данных. В наборе данных будет таблица, в которой вы можете посчитать строку следующим образом - ds.Tables[0].Rows.Count

Могут быть проблемы, связанные с Datareader, так как это поток данных, и db может иметь изменения во время чтения. Более подробное обсуждение этого вопроса можно найти в этой теме - Как получить количество строк с помощью SqlDataReader в C#

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