2017-08-07 3 views
0

diese meine Schnittstelle Anwendung enter image description hereSuche nach Datum, ohne Inhalt C#

nur Tabelle erscheint, wenn ich nach dem Datum zu suchen, sieht wie folgt aus:

enter image description here

diesen meinen Code:

Zeichenfolge a = dateTimePicker1.Value.ToString ("TT/MM/JJJJ");

 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; 

Ich möchte die Suchergebnisse angezeigt werden, aber die scheinen nur Tabellen ohne Inhalt

GetSummaryData wie folgt aussieht:

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

Dank ...

+0

haben Sie die Abfrage in Ihrem Abfragefenster versucht? Was ist Ihre Datenbank – imsome1

+0

ya, ich habe es versucht. Zugriffsdatenbank –

+0

Ich glaube, ein einzelnes Zitat fehlt, bitte versuchen Sie diese Abfrage = "wählen * von vwDataMHSSkripsi wo Tgl_Sidang = '" + a + "'"; – imsome1

Antwort

0

können Sie machen alles viel sicherer und einfacher, wenn Sie eine GetSummaryData-Funktion hinzufügen, die Parameter akzeptiert. Der Code für das sollte ungefähr so ​​aussehen:

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

können Sie nun den Code ändern, dies in Ihrem Beispiel ruft:

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

Bitte beachten Sie, ich habe Ihre Check von conn.State geändert. Bitte benutzen Sie meine Eins, da es viel effizienter ist, den richtigen Wert zu verwenden, als in Zeichenfolge zu konvertieren und dann nach "Öffnen" zu suchen.

NACHTRAG

ich eine Reihe von Parametern, anstatt nur einen einzigen Parameter, falls absichtlich erlaubt Ihnen die gleiche Routine an anderer Stelle mit mehr als einem Parameter aufrufen müssen. Wenn Sie mehr als eins benutzen, seien Sie bitte vorsichtig. Bei Verwendung von OleDb ist die Reihenfolge der Parameter wichtig (und die Namen im Gegensatz dazu relativ irrelevant); Sie müssen die Parameter in der Reihenfolge hinzufügen, in der sie in der SQL-Zeichenfolge angegeben sind.

PS

Was ich darauf hingewiesen haben sollte, ist, dass ein logischer Folge Vorteil dieses Ansatzes ist, dass Sie nicht über das Format der Daten kümmern müssen. Der Parameter nimmt als Wert eine Datetime (obwohl OleDBType auf Date gesetzt ist, ist dies tatsächlich eine Datetime). Die Bibliothek übernimmt die Schnittstelle zur Datenbank für Sie.