我使用以下通用数据助手函数来运行查询并将它们作为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
答案 0 :(得分:1)
您可以返回IDataRecord
,这可能就足够了,然后您可以直接返回MySqlDataReader
。或者你必须相应地施展它:
所以这不可能直接:
Record = (DbDataRecord)Reader;
但是这样:
Record = (DbDataRecord)(IDataRecord)Reader;