我想在sqlite中用两个textbox(textbox4.text和textbox5.text = variable)在表单中查询两个日期

时间:2018-05-26 10:08:45

标签: vb.net sqlite

Dim query As String ="从mytable中选择*,其中strftime('%Y-%m-%d',tarih)在' TextBox4.text&#39之间; ' TextBox5.text' "

无法分配查询变量? Datagridview result = empty

info:Datagridview日期格式= 2018-01-01 17:42:24

    Dim btarihyil As String
    btarihyil = DateTimePicker2.Value.ToString.Substring(6, 4)
    Dim btarihay As String
    btarihay = DateTimePicker2.Value.ToString.Substring(3, 2)
    Dim btarihgun As String
    btarihgun = DateTimePicker2.Value.ToString.Substring(0, 2)
    TextBox4.Text = btarihyil & "-" & btarihay & "-" & btarihgun

    Dim bttarihyil As String
    bttarihyil = DateTimePicker3.Value.ToString.Substring(6, 4)
    Dim bttarihay As String
    bttarihay = DateTimePicker3.Value.ToString.Substring(3, 2)
    Dim bttarihgun As String
    bttarihgun = DateTimePicker3.Value.ToString.Substring(0, 2)

    TextBox4.Text = btarihyil & "-" & btarihay & "-" & btarihgun
    TextBox5.Text = bttarihyil & "-" & bttarihay & "-" & bttarihgun

    Dim Yol As String = "Data Source=database1.s3db;version=3;new=False"
    Using MyConn As New SQLiteConnection(Yol)
        If (MyConn.State = ConnectionState.Closed) Then
            MyConn.Open()
        End If
        Dim Sorgu As String = "select * from mytable where strftime('%Y-%m-%d',tarih) between 'TextBox4.text' and 'TextBox5.text' "
        Using MyCmd As New SQLiteCommand(Sorgu, MyConn)
            Dim Da As New SQLiteDataAdapter(MyCmd)
            Dim Ds As New DataSet
            Dim Dt As New DataTable
            Ds.Reset()
            Da.Fill(Ds)
            Dt = Ds.Tables(0)

            Dim Bs As New BindingSource With {.DataSource = Dt}
            DataGridView1.DataSource = Bs
            Bs.MoveLast()

            MyConn.Close()
            MyCmd.Dispose()
            MyConn.Dispose()
        End Using
    End Using


End Sub

1 个答案:

答案 0 :(得分:1)

您在查询中字面上使用"TextBox4.Text""TextBox5.Text"。这不会将textboxes的值传递给查询。所以它会导致错误。

此外,您还需要使用参数化查询来避免语法错误。 此外,我不确定您使用strftime函数的原因。该功能仅用于格式化。

遵循我使用parameterzied查询方法重写的代码。

Dim Yol As String = "Data Source=database1.s3db;version=3;new=False"
Using MyConn As New SQLiteConnection(Yol)
    If (MyConn.State = ConnectionState.Closed) Then
        MyConn.Open()
    End If
    Dim Sorgu As String = "select * from mytable where tarih between @startDate and @endDate "
    Using MyCmd As New SQLiteCommand(Sorgu, MyConn)
        Dim startDate as new SQLiteParameter("@startDate")
        startDate.Value = DateTimePicker2.Value
        Dim endDate as new SQLiteParameter("@endDate")
        endDate.Value = DateTimePicker3.Value
        MyCmd.Parameters.Add(startDate)
        MyCmd.Parameters.Add(endDate)

        Dim Da As New SQLiteDataAdapter(MyCmd)
        Dim Ds As New DataSet
        Dim Dt As New DataTable
        Ds.Reset()
        Da.Fill(Ds)
        Dt = Ds.Tables(0)

        Dim Bs As New BindingSource With {.DataSource = Dt}
        DataGridView1.DataSource = Bs
        Bs.MoveLast()

        MyConn.Close()
        MyCmd.Dispose()
        MyConn.Dispose()
    End Using
End Using

这可以帮助您解决问题。