在vb.net中运行SQL选择日期时间选择器的日期查询

时间:2015-04-29 12:29:46

标签: sql vb.net select datepicker

我目前正在使用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

1 个答案:

答案 0 :(得分:1)

Like语句真正用于字符串。如果col7是smalldatetime,那么你应该真的使用某种日期比较。由于您使用的是Like,我的猜测是该列可能包含时间信息,您希望为特定日期返回所有记录。我不经常使用smalldatetime,但是对于datetime列,一个简单的解决方案是将列转换为日期,然后将其与从DateTime选择器传递的日期参数进行比较。这当然假设您使用的是SQL Server 2008及更高版本,因为在此之前日期数据类型不存在。

另一种解决方案是将where子句更新为以下内容,假设@Date不包含时间信息。

table1.col7 >= @Date and table1.col7 < dateadd(day, 1, @Date)