我一直在努力理解为什么它会给我这个错误,因为我没有使用SqlDataReader,我知道我正在使用SQL Server而接口正在返回特定类型,但我仍然告诉.NET改为使用IDataReader。
以下是代码:
public DataSet ExecuteSelectProcedure(string procedure, List<Parameter> parameters)
{
conexion.Open();
try
{
IDbCommand command = conexion.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
command.Connection = conexion;
command.CommandText = procedure;
foreach (var parameter in parameters)
{
IDbDataParameter dataParameter = command.CreateParameter();
dataParameter.Direction = (System.Data.ParameterDirection) parameter.Direction;
dataParameter.Value = parameter.Value;
dataParameter.ParameterName = parameter.Name;
dataParameter.DbType = (DbType) parameter.Type;
command.Parameters.Add(dataParameter);
}
IDataReader result = command.ExecuteReader();
DataSet dataSet = new DataSet();
foreach (var table in (IEnumerable<IDataReader>) result)
{
DataTable dataTable = new DataTable();
dataTable.Load(table);
dataSet.Tables.Add(dataTable);
}
result.Close();
return dataSet;
}
finally
{
conexion.Close();
}
错误是在foreach循环上转换IEnumerable时。提前谢谢......
答案 0 :(得分:3)
使用SqlDataReader
,因为这是command.ExecuteReader
返回的实际类型。然后你试图将其转换为IEnumerable<IDataReader>
,但目前尚不清楚原因。为什么期望能够发挥作用?
通过调用NextResult()
来迭代IDataReader
中的多个表(等)。例如:
do
{
// Read the current result; if reading manually, call Read()
// to get to the next row within the result
} while (reader.NextResult());