我目前正在使用Microsoft Visual Studio 2013 for Windows Desktop。我正在使用带有SQL后端的Windows窗体应用程序。我目前正在创建一个计划,我需要能够使用smalldatetime数据类型搜索一些计划列。我试图用like子句输入日期时间,但它似乎不起作用。我已经在sql server管理工作室程序中尝试过,但没有成功。这是我的代码:
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
答案 0 :(得分:1)
Like语句真正用于字符串。如果col7是smalldatetime,那么你应该真的使用某种日期比较。由于您使用的是Like,我的猜测是该列可能包含时间信息,您希望为特定日期返回所有记录。我不经常使用smalldatetime,但是对于datetime列,一个简单的解决方案是将列转换为日期,然后将其与从DateTime选择器传递的日期参数进行比较。这当然假设您使用的是SQL Server 2008及更高版本,因为在此之前日期数据类型不存在。
另一种解决方案是将where子句更新为以下内容,假设@Date不包含时间信息。
table1.col7 >= @Date and table1.col7 < dateadd(day, 1, @Date)