2012-05-14 106 views
2

在我使用SSRS 2005開發的報告應用程序中,我有一個接受時間的字符串類型參數。時間應採用格式「HH:mm:ss」的格式。如何檢查輸入字符串的格式是否正確?SQL服務器報告驗證參數格式正確

我試着做以下 則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我還得到一個錯誤

「的的轉換字符類型到日期時間數據類型導致超出範圍的日期時間值「 如何處理異常以便我不出錯?

編輯:

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 

然後我分配了一個參數(validateTime)值= Code.CheckNum(參數sTime.Value!)

但參數的值始終爲true。當我指定一個大於23的值時,我仍然看到錯誤。請參閱圖像Error when time is invalid

回答

0

而不是使用IsDate函數,使用VB.NET正則表達式。 SSRS允許充分使用.NET功能。 查看time regex的示例。 A good tutorial on 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 
+0

我得到一個eroor BC30465:'進口'的聲明必須先於任何聲明。但是在Imports語句之前,我的代碼中沒有任何聲明。 – xaria

+0

示例代碼是控制檯應用程序。你不能複製粘貼代碼。 SSRS在解釋代碼時會更改您的代碼(http://connect.microsoft.com/VisualStudio/feedback/details/478155/cannot-use-imports-statement-in-reportviewer-control-custom-code)。更改您的代碼,以便不使用導入而使用正則表達式類的全名,如System.Text.RegularExpressions.Regex.IsMatch –

+0

請參閱我的編輯 – xaria

0

我想,你可以捕捉InvalidCastException