Как получить набор данных из запроса?
У меня есть следующий запрос SQL в MS Access / VB.net:
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"
Когда запрос выполняется, он не отображает полный набор данных, который должен. Вместо этого результаты почти случайны. Что может быть не так?
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). Вместо этого, если вы преобразуете эти значения в строку, преобразование будет следовать правилам вашей языковой среды, которые могут создать строку, несовместимую с ожидаемым форматом вашего механизма базы данных (например, инверсия положения значений месяцев и дней)