假设我们有一个方法,其代码如下:
Dictionary<int, int> results = new Dictionary<int, int>();
try
{
using (SqlConnection sqlConn = new SqlConnection("some connection string"))
{
SqlCommand sqlCmd = new SqlCommand("stored procedure's name here", sqlConn);
sqlCmd.CommandType = CommandType.StoredProcedure;
//sqlCmd.Parameters.Add lines here
sqlConn.Open();
using (SqlDataReader sqlDR = sqlCmd.ExecuteReader())
{
while (sqlDR.Read())
{
results.Add((int)sqlDR["keyColumnName"], (int)sqlDR["valueColumnName"]);
}
}
}
}
catch { }
return results;
存储过程是一个带有子选择的select语句,两者都来自同一张表,返回多行,不超过几百,通常更少。假设 SP 按键列对结果进行分组(因此字典中没有重复键问题)并返回int
s(因此转换没有问题),如果发生任何其他错误,是否可以让它只返回部分结果?
我很清楚那里是一个空的 catch 块 - 如果它不是空的,我可能不会问这个问题。我也知道这段代码可以返回一个空字典。我想知道异常是否会中断读取,SqlDataReader
从而导致结果既不空也不完整。
我还被告知,在两个语句之外从SqlDataReader.Read
一次加载查询结果DataTable.Load(DataReader)
然后从 DataTable 填充结果using
将避免获得部分结果(也就是说,如果它们在上面的代码中完全可能的话)。会吗?DataTable.Load
真的有不同的工作方式吗SqlDataReader.Read
?