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

次に、=Code.CheckNum(Parameters!sTime.Value) としてパラメーター (validateTime) 値を割り当てました。

ただし、パラメーターの値は常に true です。23 より大きい値を指定しても、まだエラーが表示されます。画像をご覧ください時刻が無効な場合のエラー

4

2 に答える 2

0

をキャプチャできると思いますInvalidCastException

于 2012-05-30T13:57:06.340 に答える
0

IsDate 関数を使用する代わりに、VB.NET 正規表現を使用します。SSRS では、.NET 関数をフルに使用できます。時間正規表現の例を参照してください。 regex に関する優れたチュートリアルです。

サンプル コード コンソール アプリケーション

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 に答える