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
,那么你可以跟踪行数。