在datagridview中显示按当前日期C#过滤的数据

时间:2014-10-20 15:40:23

标签: c# mysql performance datagridview datatable

我的数据库中有大量行。当我试图将所有数据加载到datagridview时它会卡住。我想将数据加载到datagridview只有相关的datetimepicker日期。这是我目前的代码

private void showdatagrid()
{
    string constring = string.Format("datasource='{0}';username=uwadminview;port=3306;password=*****************;Connect Timeout=20000;Command Timeout=28800", dbserverip.Text);
    MySqlConnection conwaqDatabase = new MySqlConnection(constring);
    MySqlCommand cmdwaqDatabase = new MySqlCommand(" select * from waq115.loans ; ", conwaqDatabase);

    try
    {
        MySqlDataAdapter sda = new MySqlDataAdapter();
        sda.SelectCommand = cmdwaqDatabase;
        dbdataset = new DataTable();
        sda.Fill(dbdataset);
        BindingSource bsource = new BindingSource();
        bsource.DataSource = dbdataset;
        dataGridView1.DataSource = bsource;
        sda.Update(dbdataset);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
        conwaqDatabase.Close();
    }

然后不久我打电话给我再次使用像这样的行过滤事件

private void filterdata()
{
    DataView DV = new DataView(dbdataset);
    DV.RowFilter = string.Format("Convert(submittimestamp, System.String) LIKE '%{0}%'", adminviewDTP.Text);
    dataGridView1.DataSource = DV;
}

但是在这种方法中,当加载超过9000行时,性能非常糟糕,它总是被卡住。我想要直接查询数据库中仅与今天相关的数据的方法

(用户每天更新数据库,每天插入超过500行) (申请仍处于测试阶段) (我使用的是mysql数据库)

有人能告诉我任何有效的方法吗?

2 个答案:

答案 0 :(得分:0)

在数据库层而不是中间层进行过滤。

    MySqlConnection conwaqDatabase = new MySqlConnection(constring);
    MySqlCommand cmdwaqDatabase = 
         new MySqlCommand("select * from waq115.loans where submittimestamp = @date; ", conwaqDatabase);


    var dateParam = new MySqlParameter();
    dateParam.Name = "@date";
    dateParam.Value = Convert.ToDateTime(adminviewDTP.Text);
    cmdwaqDatabase.Parameters.Add(dateParam);

答案 1 :(得分:0)

MySqlCommand cmdwaqDatabase = new MySqlCommand("SELECT * FROM waq115.loans WHERE DATE(submittimestamp) = DATE(NOW())", conwaqDatabase);

更新: 使用参数:

MySqlCommand cmdwaqDatabase = new MySqlCommand("SELECT * FROM waq115.loans WHERE DATE(submittimestamp) = DATE(@p)", conwaqDatabase);

然后你可以添加如下所示的参数

cmdwaqDatabase.Parameters.AddWithValue("@P", dateTimeValue); // convert datetime picker value to DateTime and set as the value;

cmdwaqDatabase.Parameters.Add(new MySqlParameter("@P", MySqlDbType.Timestamp)).Value = dateTimeValue;