如何将mysqldatareader结果返回到列表< datetime>mylist中

i34xakig  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(347)

首先,我使用db方法来检索数据库记录

public void db()
{
    string connString = "Server=localhost;Database=test;Uid=root;Pwd='';SslMode=none";

    using (MySqlConnection mcon = new MySqlConnection(connString))
    using (MySqlCommand cmd = mcon.CreateCommand())
    {
        mcon.Open();

        cmd.CommandText = "SELECT dates FROM abctable";

        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                result.Text += reader.GetString(reader.GetOrdinal("dates"));
            }
        }
    }
}

现在,我可以在dates列2018050120180503中获得两条数据库记录。我怎样才能把这些记录放进一个 List<DateTime> mylist ?
目前,日期只是硬编码
例如

List<DateTime> mylist = new List<DateTime> { DateTime.ParseExact("20180509", "yyyyMMdd", CultureInfo.InvariantCulture) };

你知道吗?谢谢您
无法下载nuget:

aor9mmx1

aor9mmx11#

试一试这门课:

public static class DB
{
    private static readonly string ConnectionString = "Server=localhost;Database=test;Uid=root;Pwd='';SslMode=none";

    private static IEnumerable<T> GetData(string sql, Action<MySqlParameterCollection> SetParameters, Func<IDataRecord, T> transformRecord)
    {
        using (var mcon = new MySqlConnection(ConnectionString))
        using (var cmd = new MySqlCommand(sql, mcon))
        {
            if (SetParameters != null) SetParameters(cmd.Parameters);
            using (var rdr = cmd.ExecuteReader())
            {
                while (rdr.Read())
                {
                    yield return transformRecord(rdr);
                }
                rdr.Close();
            }
        }   
    }

    public static IEnumerable<DateTime> GetDates()
    {           
        return GetData("SELECT dates FROM abctable", null,
             r => (DateTime)r["dates"]);
    }
}

像这样使用:

var myList = DB.GetDates().ToList();

您可以向它添加其他公共方法,这些方法遵循的模式与 GetDates() 用于读取数据库中的不同表。下面是一个演示如何使用 SetParameters 使用准备语句/参数化查询的参数:

public IEnumerable<DateTime> GetDates(int ID)
{           
    return GetData("SELECT dates FROM abctable WHERE ID= @ID", 
         p => {
            p.Add("@ID", MySqlDbType.Int32).Value = ID;
         },
         r => (DateTime)r["dates"]);
}

您还需要一个额外的私有方法来支持insert/update/delete语句,但是我已经在这里展示了足够的内容,您现在应该可以自己编写了。

2vuwiymt

2vuwiymt2#

使用dapper可以简化对数据库的访问

public List<DateTime> getDates() {
    string connString = "Server=localhost;Database=test;Uid=root;Pwd='';SslMode=none";
    using (var connection = new MySqlConnection(connString)) {
        return connection.Query<DateTime>("SELECT dates FROM abctable").ToList();            
    }
}

假设 datestable 作为实际日期存储在数据库中。
然后通过调用函数填充列表。

List<DateTime> mylist = getDates();

相关问题