2

在我使用 SSRS 2005 开发的报告应用程序中,我有一个字符串类型的参数,它接受时间。时间应采用“HH:mm:ss”格式 如何检查输入字符串的格式是否正确?

我尝试执行以下操作 IsDate(TimeValue(parametr!stime.Value)) 只要值在范围内,它就会返回 true。但如果该值为 24:00:00 或错误值,则会引发异常。

我还尝试在报告代码中创建一个函数,如下所示:

Public Function CheckNum(sNum as String) as Boolean
Dim msg as String
msg = ""
Try
If IsDate(TimeValue(sNum))=1 Then
Return True
Else
msg="Parameter must be a number"
End If
Catch ex as Exception
Return False
End Try
If msg <> "" Then 
MsgBox(msg, 16, "Parameter Validation Error")
Err.Raise(6,Report) 'Raise an overflow
End If
End Function

当我输入一个值 24:00:00 我仍然得到一个错误

“ char 类型到 datetime 数据类型的转换导致日期时间值超出范围” 如何处理异常以免出现错误?

编辑:

public Function CheckNum(sNum as String) as Boolean

Dim REGEX_TIME = "^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?$"       
If System.Text.RegularExpressions.Regex.IsMatch(sNum, REGEX_TIME) Then
Return True
Else
Return False
End If
End Function

然后我将 parameter(validateTime) 值分配为 =Code.CheckNum(Parameters!sTime.Value)

但参数的值始终为真。当我指定一个大于 23 的值时,我仍然看到错误。请看图片时间无效时出错

4

2 回答 2

0

不要使用 IsDate 函数,而是使用 VB.NET 正则表达式。SSRS 允许充分利用 .NET 功能。请参阅时间正则表达式的示例。 一个很好的正则表达式教程

示例代码控制台应用程序

Imports System.Text.RegularExpressions

Module Module1

    Sub Main()

        Dim REGEX_TIME = "^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?$"
        Dim InputList As List(Of String) = New List(Of String)
        InputList.Add("25:00:21")
        InputList.Add("22:00:21")
        InputList.Add("AA:00:21")
        InputList.Add("17:21:02")
        For Each input As String In InputList
            If Regex.IsMatch(input, REGEX_TIME) Then
                Console.WriteLine("TIME " + input + " IS OK")
            Else
                Console.WriteLine("TIME " + input + " IS NOT OK")
            End If
        Next
    End Sub
End Module

输出是:

TIME 25:00:21 IS NOT OK
TIME 22:00:21 IS OK
TIME AA:00:21 IS NOT OK
TIME 17:21:02 IS OK
于 2012-05-24T20:58:28.567 回答
0

我认为,您可以捕获一个InvalidCastException.

于 2012-05-30T13:57:06.340 回答