Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理SqlDataReader中的多行场景?_C#_Sql_Database - Fatal编程技术网

C# 如何处理SqlDataReader中的多行场景?

C# 如何处理SqlDataReader中的多行场景?,c#,sql,database,C#,Sql,Database,我有一个SQL查询假设只返回业务数据库中的一行。基于此,我编写了以下sql脚本,以从结果集中获取数据 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 SqlComm

我有一个
SQL
查询
假设
只返回业务数据库中的
一行。基于此,我编写了以下
sql脚本
,以从结果集中获取数据

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(*)
  • 我们无法控制
    RM.Db
    数据库-它可能有数据问题(第三方)

您可以改为使用
SqlDataAdapter
,并将表中的内容填充到数据集中。数据集中将有一个表。您可以像这样对行进行计数-
ds.Tables[0]。Rows.count

可能存在与Datareader相关的问题,因为它是一个数据流,db在读取时可能会发生更改。关于这一点,可以在本主题中找到更深入的讨论-
你不考虑下一个方法来解决你的问题:

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时抛出异常?@IliarTurdushev是的,如果只有一行,那么我想读取值。如果你将
if
更改为
while
,那么你可以跟踪行数。