运行 SQL Select 在 vb.net 中使用日期时间选择器查询日期
Run SQL Select query for date with date time picker in vb.net
我目前在 Microsoft Visual Studio 2013 中为 Windows 桌面工作。我正在使用带有 SQL 后端的 windows 表单应用程序。我目前正在创建一个计划,我需要能够搜索一些具有 smalldatetime 数据类型的计划列。我正在尝试使用 like 子句输入日期时间,但它似乎不起作用。我也尝试过 sql 服务器管理工作室程序,但没有成功。这是我的代码:
MsgBox(DateTimePicker1.Value.ToString("yyyy-mmy-dd"))
Try
Using conn1 As New SqlConnection(connstring)
conn1.Open()
Using comm1 As New SqlCommand("SELECT col1, col2, col3, " _
& "col4, col5, col6, col7, col8, " _
& "col9, Col10, Col11, Col12, " _
& "Col13, Col14, Col15, " _
& "Col16, Col17, " _
& "Col18, Col19, " _
& "Col20, Col21 FROM table1 LEFT JOIN table2 " _
& "ON table2.col2 = table1.col2 Left Join table3 ON " _
& "table2.col1 = table3.col2 Left JOIN table4 ON " _
& "table2.col5 = table4.col5 WHERE Complete IS NULL" _
& " AND " _
& "table1.col7 Like '@Date%'", conn1)
comm1.Parameters.AddWithValue("@Date", DateTime Picker.Value.ToString("yyyy-mm-dd"))
Dim dt As New DataTable
Dim sql As New SqlDataAdapter(comm1)
sql.Fill(dt)
Datagridview.DataSource = dt
End Using
conn1.Close()
End Using
Call Paint()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Like 语句真正适用于字符串。如果 col7 是一个小日期时间,那么您真的应该使用某种日期比较。由于您使用的是 Like,我的猜测是该列可能包含时间信息,并且您希望返回特定日期的所有记录。我不经常使用 smalldatetime,但对于日期时间列,一个简单的解决方案是将该列转换为日期,然后将其与从 DateTime 选择器传递的日期参数进行比较。这当然假设您使用的是 SQL Server 2008 及更高版本,因为日期数据类型在那之前不存在。
另一种解决方案是将 where 子句更新为如下所示,假设 @Date 不包含时间信息。
table1.col7 >= @Date and table1.col7 < dateadd(day, 1, @Date)
我目前在 Microsoft Visual Studio 2013 中为 Windows 桌面工作。我正在使用带有 SQL 后端的 windows 表单应用程序。我目前正在创建一个计划,我需要能够搜索一些具有 smalldatetime 数据类型的计划列。我正在尝试使用 like 子句输入日期时间,但它似乎不起作用。我也尝试过 sql 服务器管理工作室程序,但没有成功。这是我的代码:
MsgBox(DateTimePicker1.Value.ToString("yyyy-mmy-dd"))
Try
Using conn1 As New SqlConnection(connstring)
conn1.Open()
Using comm1 As New SqlCommand("SELECT col1, col2, col3, " _
& "col4, col5, col6, col7, col8, " _
& "col9, Col10, Col11, Col12, " _
& "Col13, Col14, Col15, " _
& "Col16, Col17, " _
& "Col18, Col19, " _
& "Col20, Col21 FROM table1 LEFT JOIN table2 " _
& "ON table2.col2 = table1.col2 Left Join table3 ON " _
& "table2.col1 = table3.col2 Left JOIN table4 ON " _
& "table2.col5 = table4.col5 WHERE Complete IS NULL" _
& " AND " _
& "table1.col7 Like '@Date%'", conn1)
comm1.Parameters.AddWithValue("@Date", DateTime Picker.Value.ToString("yyyy-mm-dd"))
Dim dt As New DataTable
Dim sql As New SqlDataAdapter(comm1)
sql.Fill(dt)
Datagridview.DataSource = dt
End Using
conn1.Close()
End Using
Call Paint()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Like 语句真正适用于字符串。如果 col7 是一个小日期时间,那么您真的应该使用某种日期比较。由于您使用的是 Like,我的猜测是该列可能包含时间信息,并且您希望返回特定日期的所有记录。我不经常使用 smalldatetime,但对于日期时间列,一个简单的解决方案是将该列转换为日期,然后将其与从 DateTime 选择器传递的日期参数进行比较。这当然假设您使用的是 SQL Server 2008 及更高版本,因为日期数据类型在那之前不存在。
另一种解决方案是将 where 子句更新为如下所示,假设 @Date 不包含时间信息。
table1.col7 >= @Date and table1.col7 < dateadd(day, 1, @Date)