只出现 table 没有内容的搜索日期 c#

Search date that appears only table without content c#

这是我的界面应用程序

如果我按日期搜索,看起来像这样:

这是我的代码:

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

谢谢...

如果您添加一个接受参数的 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 支票。请使用我的,因为使用正确的值比转换为字符串然后检查 "Open".

更有效

附录

我特意允许参数数组而不是单个参数,以防您需要在其他地方使用多个参数调用相同的例程。如果使用多个,请小心。使用 OleDb 时,参数的顺序很重要(相比之下,名称相对无关紧要);您必须按照它们在 SQL 字符串中引用的顺序添加参数。

PS

我应该指出的是,这种方法的必然好处是您无需担心日期格式。该参数将日期时间作为其值(即使 OleDBType 设置为 Date,这实际上是一个日期时间)。图书馆为您处理数据库接口。