C# ACCESS数据库查询

C# ACCESS数据库查询,c#,ms-access,C#,Ms Access,我尝试在特定日期之间接收值。但我的代码给出了错误 cmd.CommandText = "SELECT * FROM gider WHERE [tarih] Between #" + startdate + "# and #" + enddate+ "#"; 我得到了以下错误 System.Data.dll中发生“System.Data.OleDb.OledBeException”类型的异常,但未在用户代码中处理 其他信息:查询表达式“

我尝试在特定日期之间接收值。但我的代码给出了错误

cmd.CommandText = "SELECT * FROM gider WHERE [tarih] Between #" + startdate + "# and #" + enddate+ "#";
我得到了以下错误

System.Data.dll中发生“System.Data.OleDb.OledBeException”类型的异常,但未在用户代码中处理

其他信息:查询表达式“[tarih]中的日期在#22.03.2006 15:31:48#和#22.03.2016 15:31:48”之间出现语法错误

我搜索了很多,但所有的代码示例看起来都像我的。我找不到解决办法

非常感谢您的帮助。

试试这个: 1:

  • 尝试将日期格式化为
    yyyy-mm-dd
  • 试试这个: 1:

  • 尝试将日期格式化为
    yyyy-mm-dd

  • 您应该在查询中使用
    OleDbParameter
    。它将一次解决2个问题

  • 它将负责将日期转换为查询的正确格式
  • 它将阻止SQL注入
  • 例如:

    cmd.CommandText = "SELECT * FROM gider WHERE [tarih] Between @startdate and @enddate";
    cmd.Parameters.Add("@startdate", OleDbType.Date).Value = startdate;
    cmd.Parameters.Add("@enddate", OleDbType.Date).Value = enddate;
    

    您应该在查询中使用
    OleDbParameter
    。它将一次解决2个问题

  • 它将负责将日期转换为查询的正确格式
  • 它将阻止SQL注入
  • 例如:

    cmd.CommandText = "SELECT * FROM gider WHERE [tarih] Between @startdate and @enddate";
    cmd.Parameters.Add("@startdate", OleDbType.Date).Value = startdate;
    cmd.Parameters.Add("@enddate", OleDbType.Date).Value = enddate;
    

    不知道具体的访问语法。但除此之外:您的代码容易受到攻击!不幸的是,盖伊两个都试过了。还要感谢Rene,我会在发现问题后修复sql inj风险,因为我不知道具体的访问语法。但除此之外:您的代码容易受到攻击!不幸的是,盖伊两个都试过了。还感谢Rene,我会在发现问题后修复sql inj风险谢谢,我喜欢这样做,但现在我得到了额外的信息:“条件表达式中的数据类型不匹配。”错误。我在c#DateTime startdate、DateTime enddate和access:Date/Time General Date中的定义如果您指定
    SqlDbType
    。更改为:
    cmd.Parameters.Add(新的SqlParameter(“@startdate”,SqlDbType.Date){Value=startdate})
    这个答案肯定是正确的,但是(1)在添加参数时不需要使用
    新的
    构造,(2)异常显示代码使用的是OleDb,因此答案应该使用OleDb。。。对象而不是Sql。。。使用OleDb对象的好处。我更新了我的答案。我也不确定新的
    ,你能举个例子吗?我没有看到允许同时指定名称、DbType和值的函数。cmd.Parameters.Add(“?”,OleDbType.Date)。value=startdate;谢谢,我确实喜欢这样做,但现在我得到了额外的信息:“条件表达式中的数据类型不匹配。”错误。我在c#DateTime startdate、DateTime enddate和access:Date/Time General Date中的定义如果您指定
    SqlDbType
    。更改为:
    cmd.Parameters.Add(新的SqlParameter(“@startdate”,SqlDbType.Date){Value=startdate})
    这个答案肯定是正确的,但是(1)在添加参数时不需要使用
    新的
    构造,(2)异常显示代码使用的是OleDb,因此答案应该使用OleDb。。。对象而不是Sql。。。使用OleDb对象的好处。我更新了我的答案。我也不确定新的
    ,你能举个例子吗?我没有看到允许同时指定名称、DbType和值的函数。cmd.Parameters.Add(“?”,OleDbType.Date)。value=startdate;