【问题标题】:SQL Selecting without parameters?SQL选择不带参数?
【发布时间】:2018-10-26 15:35:12
【问题描述】:

我试图从数据库表中选择所有记录。每条记录都有一个日期我想选择该日期与今天日期匹配的所有记录

我创建了一个名为 todaydate 的变量并在查询中使用它,但我得到 No value provided for one or more required parameters 错误。我会使用哪些可能的参数

这里是代码 任何帮助将不胜感激

    Dim todaydate As Date = Date.Today()
    If DbConnect() Then
        Dim SQLCmd As New OleDbCommand
        With SQLCmd
            .Connection = cn
            .CommandText = "Select * from Tbl_Rental Where DateOfHire = todaydate"

            'parameters????

【问题讨论】:

  • 根据您使用的数据库,语法会有所不同,但总有一个“今天的日期”函数或系统变量可用。例如,在 oracle 中,您将使用“sysdate”。否则,您需要将该日期添加为参数或连接它(但不要连接它),没有其他选项。发布您正在使用的数据库,您可能会获得更具体的查询当前日期的解决方案
  • 我不确定为什么会有答案建议您添加日期参数或使用字符串 concat,也不需要查询与今天日期匹配的记录。对于 oracle,查询将只是 Select * from Tbl_Rental Where DateOfHire = trunc(sysdate),或者对于 sql server Select * from Tbl_Rental Where DateOfHire = convert(date, getdate())

标签: vb.net


【解决方案1】:

您没有使用该变量。但是,您应该始终使用 sql 参数而不是连接字符串(原因之一:避免 SQL 注入)。我还建议使用Using-statement 进行连接以及实现IDisposable 的所有其他内容:

Using cn As New OleDbConnection(connectionString)
    cn.Open()
    Using cmd As New OleDbCommand("Select * from Tbl_Rental Where DateOfHire = @DateOfHire", cn)
        dim hireDateParameter As new OleDbParameter("@DateOfHire", OleDbType.Date)
        hireDateParameter.Value = Date.Today
        cmd.Parameters.Add(hireDateParameter)
        ' ... '
    End Using
End Using 

如果它总是Date.Today,你也可以不带参数这样做,因为每个数据库都有返回当前日期的日期函数。但由于您没有告诉我们您使用的是哪个数据库,因此很难举个例子。

【讨论】:

    【解决方案2】:

    您需要实际使用您的变量,而不是将其作为字符串的一部分。试试这个:

    .CommandText = "Select * from Tbl_Rental Where DateOfHire = '" & todaydate.ToString("dd/MM/yy") & "'"
    

    【讨论】:

    • 我收到数据不匹配错误?这是因为在数据库中 DateOfHire 的数据类型是日期/时间,而今天的日期是字符串?
    • 使用todaydateToString方法。请参阅我对答案的编辑。
    • 不,这似乎也不起作用。如果我将 todaydate 更改为一个无法正常工作的字符串,因为 DateOfHire 是一个日期?
    • 实际上,您应该使用“ToShortDateString”,然后它至少在 SQL Server 上应该可以正常工作。
    • 实际上我认为我发现了问题,在调试 Todaydate = 10/25/18 时,在我的数据库中是 25/10/18 所以一个是美国人。无论如何在代码中解释这一点?
    【解决方案3】:

    从稍微不同的角度来看,日期只是“大于昨天”就足够了吗?

    .CommandText = "Select * from Tbl_Rental Where DateOfHire >= cast(getdate() as date)"
    

    这会去掉日期的时间,包括今天午夜或之后的任何时间。

    【讨论】:

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