0

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 をキャストするときです。前もって感謝します...

4

1 に答える 1

3

使用しているのは、それが返さSqlDataReaderれる実際の型だからです。command.ExecuteReader次に、それを にキャストしようとしていますが、そのIEnumerable<IDataReader>理由は明らかではありません。なぜそれがうまくいくと思ったのですか?

IDataReaderを呼び出して、複数のテーブル (など) を反復処理しますNextResult()。例えば:

do
{
    // Read the current result; if reading manually, call Read()
    // to get to the next row within the result
} while (reader.NextResult());
于 2010-12-08T16:47:55.773 に答える