2017-08-07 38 views
0

這是我的界面應用 enter image description here出現只表,而內容C#搜索日期

,如果我按日期搜索,看起來像這樣:

enter image description here

這是我的代碼:

string a = dateTimePicker1.Value.ToString(「dd/MM/yyyy」);

 clsAccess db = new clsAccess(DB_PATH); 
     string query = ""; 
     query = "select * from vwDataMHSSkripsi where Tgl_Sidang = " + a + ""; 
     DataTable dt = db.GetSummaryData(query); 
     c1FlexGridPencarianSkripsi.DataSource = dt; 
     db.CloseDatabaseConnection(); db = null; 

我想要顯示的搜索結果,但其中只出現沒有內容表

GetSummaryData看起來是這樣的:

public System.Data.DataTable GetSummaryData(string SQLStatement) 
{ 
    System.Data.DataTable dt = new System.Data.DataTable(); 
    if (conn.State.ToString().Equals("Open")) 
    { 
     System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(SQLStatement, conn); 
     using (System.Data.OleDb.OleDbDataAdapter rsAdapter = new System.Data.OleDb.OleDbDataAdapter()) 
     { 
      rsAdapter.SelectCommand = cmd; 
      rsAdapter.Fill(dt); 
     } 
    } 
    return dt; 
} 

謝謝...

+0

您是否在查詢窗口中嘗試查詢?你的數據庫是什麼 – imsome1

+0

你好,我已經試過了。訪問數據庫。 –

+0

我覺得單引號缺失,請嘗試這個查詢=「select * from vwDataMHSSkripsi where Tgl_Sidang ='」+ a +「'」; – imsome1

回答

0

可以使如果添加一個接受參數的GetSummaryData函數,就會更安全和簡單。該代碼,這應該是這個樣子:

public System.Data.DataTable GetSummaryData(string SQLStatement, 
    OleDbParameter[] parameters) 
{ 
    System.Data.DataTable dt = new System.Data.DataTable(); 
    if (conn.State == ConnectionState.Open) 
    { 
     System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(SQLStatement, conn); 
     for (int i = 0; i < parameters.Length; i++) 
     { 
      cmd.Parameters.Add(parameters[i]); 
     } 
     using (System.Data.OleDb.OleDbDataAdapter rsAdapter = new System.Data.OleDb.OleDbDataAdapter()) 
     { 
      rsAdapter.SelectCommand = cmd; 
      rsAdapter.Fill(dt); 
     } 
    } 
    return dt; 
} 

現在可以更改調用此您的例子代碼:

string query = ""; 
query = "select * from vwDataMHSSkripsi where Tgl_Sidang = @mydate"; 
OleDbParameter[] parameters = new OleDbParameter[1]; 
OleDbParameter param = new OleDbParameter(); 
param.ParameterName = "@mydate"; 
param.OleDbType = OleDbType.Date; 
param.Value = dateTimePicker1.Value; 
parameters[0] = param; 

DataTable dt = db.GetSummaryData(query, parameters); 

請注意,我已經改變了你的conn.State的檢查。請使用我的一個,因爲使用正確的值會更高效,而不是轉換爲字符串,然後檢查「打開」。

附錄

我特意允許的參數,而不僅僅是一個單一的參數數組,如果你需要一個以上的參數,其他地方打電話相同程序。如果使用多個,請注意。當使用OleDb時,參數的順序很重要(和名稱相反,相對而言不相關);您必須按照它們在SQL字符串中引用的順序添加參數。

PS

我應該指出的是,這種方法的一個衍生好處,就是你不需要擔心日期的格式。該參數將datetime作爲其值(儘管OleDBType設置爲Date,實際上是一個日期時間)。該庫爲您處理到數據庫的接口。