【问题标题】:SQL statement in MS Access with parameters of type date带有日期类型参数的 MS Access 中的 SQL 语句
【发布时间】:2018-04-28 03:51:22
【问题描述】:

我有一个用于在 MS Access 中查询的 SQL 语句。我想得到日期之间的交易结果。

这是我的代码:

 DateTime pFromNew = Convert.ToDateTime(this.dateTimePicker1.Value.ToString("yyyy-MM-dd"));
 DateTime pToNew = Convert.ToDateTime(this.dateTimePicker2.Value.ToString("yyyy-MM-dd"));

 string pFrom = "#" + pFromNew.ToString() + "#";
 string pTo = "#" + pToNew.ToString() + "#";

 chrTrans.Series["Class"].Points.Clear();

 oconn.Open();

 OleDbCommand cmd = oconn.CreateCommand();
 cmd.CommandType = CommandType.Text;

 cmd.CommandText = "Select ClassType,Nametree,TransWeight,Valuedate  from tblTrans where Nametree = '" + this.cboNametree.Text.Trim() + "' and valuedate between '" + pFrom + "' and '" + pTo + "'";
 //+ "' and valuedate between '"+ this.dateTimePicker1.Text +"' and '"+ this.dateTimePicker2.Text +"'";

 cmd.ExecuteNonQuery();

这句话有什么问题?

我总是收到这个错误:

条件表达式中的数据类型不匹配。

【问题讨论】:

  • 我已经有一段时间没有这样做了,但我认为您在日期前后不需要'。而不是'#1/1/2018#' 你会做#1/1/2018#。
  • SQL Injection alert - 您应该不将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看 Little Bobby Tables

标签: c# ms-access port


【解决方案1】:

删除字符串中的单引号...我会告诉你...

这一行:

cmd.CommandText = "Select ClassType,Nametree,TransWeight,Valuedate  from tblTrans where Nametree = '" + this.cboNametree.Text.Trim() + "' and valuedate between '" + pFrom + "' and '" + pTo + "'";

应该是:

cmd.CommandText = "Select ClassType,Nametree,TransWeight,Valuedate  from tblTrans where Nametree = '" + this.cboNametree.Text.Trim() + "' and valuedate between " + pFrom + " and " + pTo;

原因是您已经在日期字符串周围连接了一个 # 符号 - 因此不需要单引号。

【讨论】:

  • 如果有帮助,请单击左侧的绿色复选标记标记为答案。谢谢。
【解决方案2】:

你把它弄得太复杂了,来回转换了三遍。

可以简化为:

string pFrom = "#" + this.dateTimePicker1.Value.ToString("yyyy'/'MM'/'dd") + "#";
string pTo = "#" + this.dateTimePicker2.Value.ToString("yyyy'/'MM'/'dd") + "#";

// snip

cmd.CommandText = "Select ClassType,Nametree,TransWeight,Valuedate from tblTrans where Nametree = '" + this.cboNametree.Text.Trim() + "' and valuedate between " + pFrom + " and " + pTo + "";

【讨论】:

    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 2021-06-02
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多