无法转换“System.Data.SqlClient.SqlDataReader”类型的对象;输入“System.Collections.Generic.IEnumerable”
我一直试图理解为什么它给我这个错误,因为我没有使用 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 时发生的。提前致谢...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它使用
SqlDataReader
,因为这是command.ExecuteReader
返回的实际类型。然后,您尝试将其转换为IEnumerable
,但不清楚原因。为什么您期望它会起作用?您可以通过调用
NextResult()
。例如:It is using
SqlDataReader
, because that's the actual type thatcommand.ExecuteReader
is returning. You're then trying to cast that to anIEnumerable<IDataReader>
, but it's not clear why. Why did you expect that to work?You iterate over multiple tables (etc) in an
IDataReader
by callingNextResult()
. For example: