winforms 将整数通配符传递给SQL选择查询

rjee0c15  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(147)

我在一个正在开发的应用程序中有一个搜索功能,操作员可以通过日期、跟踪编号(运单)或发件人姓名(或三者的组合)进行搜索。
按任何组合搜索都有效...直到运单文本框为空。如果为空,则出现以下错误:
System.FormatException:'无法将参数值从String转换为Int64。'
这可能是非常明显的,但运单字段是一个整数(bigint)。
我试过设置这个,这样如果运单字段是空的,它会根据其他搜索参数包含所有适用的运单号。代码如下,看起来很明显原因是'%'没有形成整数的一部分。我试过搞乱它,但没有成功,我想知道是否应该使用某种形式的正则表达式来将它联系在一起?

SELECT 
    LabID, GivenName, Surname, DOB, Sex, Service, Specimen, 
    ReferDate, WaybillNo, SendDate
FROM 
    US_Biotek
WHERE
    SenderName LIKE @SenderName 
    AND WaybillNo LIKE @WaybillNo 
    AND SendDate BETWEEN @StartDate AND @EndDate

    ", conn)

    cmd.Parameters.Add("@StartDate", SqlDbType.Date).Value = dateFrom.Value
    cmd.Parameters.Add("@EndDate", SqlDbType.Date).Value = dateTo.Value

    If cbName.SelectedText.Length > 5 Then
        cmd.Parameters.Add("@SenderName", SqlDbType.VarChar).Value = cbName.SelectedItem
    Else
        cmd.Parameters.Add("@SenderName", SqlDbType.VarChar).Value = "%"
    End If

    If txtWBno.Text.Length = 12 Then
        Dim a As Int64 = Convert.ToInt64(txtWBno.Text)
        cmd.Parameters.Add("@WaybillNo", SqlDbType.BigInt).Value = a
    ElseIf txtWBno.Text.Length < 12 Then
        cmd.Parameters.Add("@WaybillNo", SqlDbType.BigInt).Value = "%"
    End If

    conn.Open()

最终目标是让它在文本框为空时选择所有运单,在文本长度介于1和11之间(应该是12)时抛出错误(对这部分进行排序),或者在输入正确的数字时找到特定的运单。

tkqqtvp1

tkqqtvp11#

根据 我 收到 的 评论 , 我 最终 将 SQL 中 的 列 更改 为 文本 字段 , 并 找到 了 一 种 只 允许 在 文本 框 中 使用 数字 字符 的 方法 。

Private Sub txtWBNo_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtWBno.KeyPress

        If Not Char.IsNumber(e.KeyChar) AndAlso Not Char.IsControl(e.KeyChar) Then
            e.Handled = True
        End If

    End Sub

    Private Sub txtWBNo_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtWBno.TextChanged
        Dim digitsOnly As Regex = New Regex("[^\d]")
        txtWBno.Text = digitsOnly.Replace(txtWBno.Text, "")
    End Sub

中 的 每 一 个
文本 框 有 一 个 长度 限制 集 , 我 也 在 参数 中 定义 了 字符 串 长度 。

If cbName.SelectedText.Length > 5 Then
                    cmd.Parameters.Add("@SenderName", SqlDbType.VarChar, 90).Value = cbName.SelectedItem
                Else
                    cmd.Parameters.Add("@SenderName", SqlDbType.VarChar, 90).Value = "%"
                End If

                If txtWBno.Text.Length = 12 Then
                    cmd.Parameters.Add("@WaybillNo", SqlDbType.VarChar, 12).Value = txtWBno.Text
                ElseIf txtWBno.Text.Length < 12 Then
                    cmd.Parameters.Add("@WaybillNo", SqlDbType.VarChar, 12).Value = "%"
                End If

格式
感谢 所有 人 在 正确 方向 上 的 推动 。

相关问题