2014-10-20 93 views
0

我的數據庫中有大量的行。當我試圖加載到datagridview的所有數據它卡住了。我想將數據加載到只與datetimepicker日期相關的datagridview。這是我當前的代碼按當前日期過濾顯示datagridview中的數據C#

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(); 
    } 

然後不久之後我把這個我再次使用了一個RowFilter事件這樣

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

'Charith'爲什麼你覺得需要使用BindingSource只是好奇......當你需要做的就是將GridView的DataSource分配給數據集..也就是9000行實際上什麼都不是,應該加載非常快。 。你可以在數據庫端添加一個Where子句或過濾器嗎? – MethodMan 2014-10-20 15:48:53

+0

先生,我沒有很好的C#知識。你能告訴我如何做到這一點。我使用教程視頻製作了這段代碼:( – 2014-10-20 15:56:53

回答

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

UPDATE: 隨着參數:

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; 
+0

但是當我添加參數像凸輪說,它給了我這個錯誤MySql.Data.MySqlClient.MySqlParameter'不包含一個構造函數,需要1個參數 – 2014-10-20 16:07:01

+0

你可以請求告訴我如何轉換它:( – 2014-10-20 16:14:47

+0

好吧,你可以給你的樣本值爲adminviewDTP文本?或者datetimepicker使用的日期時間格式是什麼? – Damith 2014-10-20 16:17:06

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); 
+0

感謝先生。但它給了我一個這樣的錯誤錯誤\t'MySql.Data.MySqlClient.MySqlParameter'不包含一個構造函數,它帶有1個參數 – 2014-10-20 15:59:33

+0

看到更新的答案 – 2014-10-20 21:08:02