我的数据库中有大量行。当我试图将所有数据加载到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数据库)
有人能告诉我任何有效的方法吗?
答案 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;