我在一个正在开发的应用程序中有一个搜索功能,操作员可以通过日期、跟踪编号(运单)或发件人姓名(或三者的组合)进行搜索。
按任何组合搜索都有效...直到运单文本框为空。如果为空,则出现以下错误:
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)时抛出错误(对这部分进行排序),或者在输入正确的数字时找到特定的运单。
1条答案
按热度按时间tkqqtvp11#
根据 我 收到 的 评论 , 我 最终 将 SQL 中 的 列 更改 为 文本 字段 , 并 找到 了 一 种 只 允许 在 文本 框 中 使用 数字 字符 的 方法 。
中 的 每 一 个
文本 框 有 一 个 长度 限制 集 , 我 也 在 参数 中 定义 了 字符 串 长度 。
格式
感谢 所有 人 在 正确 方向 上 的 推动 。