繁体   English   中英

来自DataReader的单个DBDataRecord

[英]Single DBDataRecord From 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的东西

您可以返回IDataRecord ,这可能就足够了,然后可以直接返回MySqlDataReader 或者,您必须相应地将其转换为:

因此,这不可能直接实现:

Record = (DbDataRecord)Reader;

但是这样:

Record = (DbDataRecord)(IDataRecord)Reader;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM