【问题标题】:Search date that appears only table without content c#仅显示没有内容的表格的搜索日期c#
【发布时间】:2018-01-14 08:23:09
【问题描述】:

这是我的界面应用程序

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

这是我的代码:

字符串 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;
}

谢谢...

【问题讨论】:

  • 您是否在查询窗口中尝试过查询?你的数据库是什么
  • 是的,我试过了。访问数据库。
  • 我认为缺少单引号,请尝试此查询 = "select * from vwDataMHSSkripsi where Tgl_Sidang = '" + a + "'";
  • 哈哈哈我就是这样尝试的。错误“标准表达式中的数据类型不匹配。”
  • 你的“db”对象是什么类?你有它作为 clsAccess 但这是一个 ADODB 连接还是什么?

标签: c# winforms select datetimepicker


【解决方案1】:

如果您添加一个接受参数的 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多