单个DBDataRecord来自DataReader

时间:2014-01-08 16:22:33

标签: c# datareader

我使用以下通用数据助手函数来运行查询并将它们作为DbDataRecords的集合返回。

public static IEnumerable<DbDataRecord> GetDataRecords(string Query, Dictionary<string, object> Parameters, CommandType CommandType = CommandType.Text)
    {
        using (MySqlConnection Connection = CreateConnection())
        {   
            using (MySqlCommand cmd = new MySqlCommand(Query, Connection))
            {
                cmd.CommandType = CommandType;

                foreach (var Parameter in Parameters)
                {
                    cmd.Parameters.AddWithValue(Parameter.Key, Parameter.Value);
                }

                Connection.Open();     
                using (MySqlDataReader Reader = cmd.ExecuteReader())
                {
                    foreach (DbDataRecord record in Reader)
                    {
                        yield return record;
                    }          
                }                    
                Connection.Close();  
            }
        } 
    }

这适用于多个结果,但我还想创建一个函数,将读取器中的单个记录作为单个DbDataRecord返回。我无法弄清楚如何将读取器中的单行转换为DbDataRecord。以下是我到目前为止的情况:

 public static DbDataRecord GetDataRecord(string Query, Dictionary<string, object> Parameters, CommandType CommandType = CommandType.Text)
    {
        DbDataRecord Record = null;

        using (MySqlConnection Connection = CreateConnection())
        {
            using (MySqlCommand cmd = new MySqlCommand(Query, Connection))
            {
                cmd.CommandType = CommandType;

                foreach (var Parameter in Parameters)
                {
                    cmd.Parameters.AddWithValue(Parameter.Key, Parameter.Value);
                }

                Connection.Open();
                using (MySqlDataReader Reader = cmd.ExecuteReader())
                {
                   if(Reader.Read() != false)                        
                   {
                       Record = ???;
                   }                        
                }
                Connection.Close();
            }
        }

        return Record;
    }

我看过很多例子,展示了如何返回一列(ExecuteScalar),这不是我想要的。我也知道如何获取单个列值。再说一遍,这不是我想做的事。

基本上我想替换下面的foreach循环

foreach (DbDataRecord record in Reader)
{
    yield return record;
}  

将某个读取器行转换为DBDataRecord

1 个答案:

答案 0 :(得分:1)

您可以返回IDataRecord,这可能就足够了,然后您可以直接返回MySqlDataReader。或者你必须相应地施展它:

所以这不可能直接:

Record = (DbDataRecord)Reader;

但是这样:

Record = (DbDataRecord)(IDataRecord)Reader;