关于sql:在vb.net中使用Char.IsNumber检查第3个字符

Checking 3rd character with Char.IsNumber in vb.net

我正在搜索数据库并从中提取结果。在wpf中显示它之前,我正在检查名为primarysponsor的字段中文本的内容,该字段可以是(1)空白/空(2)第三个字符(3)人名处的数字。我目前正在使用char.isNumber检查选项2,如果位置4有数字。

1
2
3
4
5
6
7
8
9
10
11
12
 IF reader("PrimarySponsor") IS DBNull.Value THEN

                    resultxPrimSpon =""

                ELSEIF CHAR.IsNumber(reader("PrimarySponsor"), 3) THEN

                    resultxPrimSpon ="Terminated"

                ELSE
                    resultxPrimSpon = reader("PrimarySponsor")

                END IF

在我签入char.isNumber之前,我得到了4个显示结果。当我添加char.isNumber代码时,只得到2个结果和错误;

Error while connecting to SQLServer.Sepcified argument was out of the range of valid values. Parameter name: index.

有人知道为什么会发生这种情况或者如何解决它吗?


由于Char.IsNumber不是SQL Server方法,所以不清楚从何处得到该错误。所以我假设这是来自你的定制信息。但是,"指定参数超出范围"记录如下:

ArgumentOutOfRangeException: index is less than zero or greater than
the last position in s.

所以看起来至少有一个字符串短于4个字符。通常,如果必须多次访问读卡器值,则应将读卡器值存储在正确类型的变量中。在这种情况下,在String变量中。

但创建一个具有所有属性的自定义类型也是一个好主意。然后您可以将所有内容添加到List(Of T)。下面是一个例子:

1
2
3
Public Class Sponsor
    Public Property PrimarySponsor AS String
END Class

当然,你也可以用List(Of String)代替List(Of Sponsor)。那么就不需要创建新类型了。但我假设表中有多个列。使用自定义类型大大提高了可读性和可维护性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim allSponsors AS NEW List(OF Sponsor)
USING reader = command.ExecuteReader()
    IF reader.HasRows THEN
        Dim primSponsorColumnIndex = reader.GetOrdinal("PrimarySponsor")
        While reader.Read
            Dim sponsor AS NEW Sponsor()
            IF reader.IsDBNull(primSponsorColumnIndex) THEN
                sponsor.PrimarySponsor =""
            ELSE
                sponsor.PrimarySponsor = reader.GetString(primSponsorColumnIndex)
                IF sponsor.PrimarySponsor.Length >= 4 AndAlso _
                   CHAR.IsDigit(sponsor.PrimarySponsor(3)) THEN
                    sponsor.PrimarySponsor ="Terminated"
                END IF
            END IF
            allSponsors.Add(sponsor)
        END While
    END IF
END USING

首先用DataReader.IsDBNull检查值是否为Null。然后在使用Char.IsDigit(sponsor.PrimarySponsor(3))避免ArgumentOutOfRangeException之前检查Length >= 4是否正确。

C中char.isDigit()和char.isNumber()的区别#