在sqlite数据读取器中使用if语句

0dxa2lsx  于 12个月前  发布在  SQLite
关注(0)|答案(1)|浏览(203)

我有一个SQLite数据库的支票簿应用程序。TXDataTABLE有一些字段,我关心的两个是txSortDate和txSearchMonth。我写了一个SQL搜索,以查找所有条目从一个月到另一个月按年。搜索工作,但阅读器有其他想法,它希望如何显示数据。

示例如果我将from month设置为Jan,将to month设置为Mar,我将获得相应的月份,但读取器包括当前月份。

以下是SQL搜索代码:

ElseIf gvSearchType = "MoRangeYr" Then
       cmd.CommandText = "SELECT * FROM TxData WHERE txSearchMonth BETWEEN $gvFromMonth AND $gvToMonth AND txYear = $gvYear "
       cmd.Parameters.AddWithValue("$gvFromMonth", gvFromMonth)
       cmd.Parameters.AddWithValue("$gvToMonth", gvToMonth)
       cmd.Parameters.AddWithValue("$gvYear", gvYear)

字符串
下面是未绑定到显示数据的DataGridView的READER Code DB

Using rdr As SQLite.SQLiteDataReader = cmd.ExecuteReader
                'dgvTX.DataSource = rdr
                'Statement Above is when DB is bound to dgvTX
                '============================================

                While rdr.Read()
                    intID = CInt((rdr("TID")))
                    strDate = rdr("txSortDate").ToString 'txSearchMonth '
                    strTxType = rdr("txType").ToString
                    strAmt = CDec(rdr("txAmount"))
                    strCKNum = rdr("txCKNum").ToString
                    strDesc = rdr("txDesc").ToString
                    strBal = CDec(rdr("txBalance"))
                    dgvTX.Columns(3).DefaultCellStyle.Format = "N"
                    dgvTX.Columns(6).DefaultCellStyle.Format = "N"
                    'dgvTX.Columns(6).DefaultCellStyle.Format = "C"'Adds the $ sign and commas
                    dgvTX.Rows.Add(intID, strDate, strTxType, strAmt, strCKNum, strDesc, strBal, emptyStr)

                    rowCount = rowCount + 1

                End While


令人不快的一行代码是

strDate = rdr("txSortDate").ToString


我认为一个解决方案是在READER代码中使用一个条件语句。
或者我有两个读者,一个用于其他搜索,一个用于MoRangeYr。
我需要一些帮助来写条件语句?
或其他更好的建议如何解决这个问题

  • txSortDate中的数据看起来像这样2021年10月23日
  • txSearchMonth中的数据看起来像这样1,2,3你明白了吗

是的,当我设计DB的时候,我没有考虑过,老话说,后站点总是20/20
这是搜索1月至3月的屏幕截图注意,我没有要求OCT x1c 0d1x
从月份和到月份的搜索数据是使用下面的组合框部分代码输入的

Private Sub cbToMo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbToMo.SelectedIndexChanged

    If cbToMo.SelectedIndex > -1 Then

        Dim sitem As String
        sitem = CType(cbToMo.SelectedItem, String)

        Dim month As String
        month = sitem
        Select Case month
            Case = "January"
                intToMonth = 1
            Case = "February"
                intToMonth = 2
            Case = "March"
                intToMonth = 3

iqxoj9l9

iqxoj9l91#

您需要将日期从String转换为Date类型:

Dim dateFormat = "MMM-d-yyyy"
Dim dteDate As Date 
Date.TryParseExact(rdr("txSortDate").ToString, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, dteDate)

字符串
然后在网格中使用dteDate
(尽管我同意@Joel Coehoorn的观点,最好的选择是重写数据)

相关问题