【问题标题】:How do I get dataset from the query?如何从查询中获取数据集?
【发布时间】:2015-02-05 22:04:48
【问题描述】:

我在 MS Access / VB.net 中有以下 SQL 查询:

    Dim sql = "SELECT [Product Name], [Customer Name], [Group Associated], [Customer Address], [Product Price], [Current Stock], [Date Ordered], [Volume Purchased] FROM (torder INNER JOIN tproducts ON tproducts.Product_ID = torder.Product_ID) INNER JOIN tcustomer ON torder.Customer_ID = tcustomer.Customer_ID WHERE torder.[Date Ordered] Between #" & StartOfTimePeriod & "# And #" & Today & "#;"
    conn.Open()
    Dim dataAdapter As New OleDbDataAdapter(sql, conn)
    Dim ds As New DataSet()
    dataAdapter.Fill(ds, "torder")
    conn.Close()
    DataGridView.DataSource = ds
    DataGridView.DataMember = "torder"

当查询运行时,它不会显示它应该显示的完整数据集。相反,结果几乎是随机的。有什么问题?

http://prntscr.com/5eh4ge

http://prntscr.com/5eh4ai

【问题讨论】:

  • 您期待什么?在 msaccess 中运行此查询以及使用应用程序运行时,您获得了多少条记录?
  • 数据库表定义中的[Date Ordered]是什么类型?
  • [订购日期] 是日期/时间
  • Windows 是否配置为使用dd/mm/yyyy 短日期格式?

标签: sql vb.net ms-access dataset dataadapter


【解决方案1】:

不要对日期和时间值进行字符串化。使用参数化查询。

Dim sql = "SELECT [Product Name], [Customer Name], [Group Associated], " & _
          "[Customer Address], [Product Price], [Current Stock], [Date Ordered], " & _
          "[Volume Purchased] " & _
          "FROM (torder INNER JOIN tproducts ON tproducts.Product_ID = torder.Product_ID) " & _
          "INNER JOIN tcustomer ON torder.Customer_ID = tcustomer.Customer_ID " & _
          "WHERE torder.[Date Ordered] >= ? And torder.[Date Ordered] <= ?"

Dim dataAdapter As New OleDbDataAdapter(sql, conn)
Dim p1 = new OleDbParameter() With 
{
    .ParameterName = "@p1",
    .OleDbType = OleDbType.Date,
    .Value = StartOfTimePeriod
}
Dim p1 = new OleDbParameter() With 
{
    .ParameterName = "@p2",
    .OleDbType = OleDbType.Date,
    .Value = DateTime.Today.AddMinutes(1339)
}
dataAdapter.SelectCommand.Parameters.Add(p1)
dataAdapter.SelectCommand.Parameters.Add(p2)
....

这样,您的 DateTime 值的正确解释是与实际 DateTime 值一起传递给数据库引擎的作业(我假设 StartOfTimePeriod 是一个 DateTime 变量)。 相反,如果您将这些值转换为字符串,则转换遵循您的语言环境的规则,该规则可能会生成与您的数据库引擎的预期格式不兼容的字符串(例如月份和日期值的位置反转)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2013-02-01
    • 2021-04-24
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多