2011-03-17 46 views
0

例如:TableName.ColumnName==Value如何獲取用戶輸入的值的數據類型

我有columnName的數據類型,但值由用戶輸入, 可以是int/string/datetime或任何值。

我需要檢查的列名和價值。代碼的數據類型應該兩個窗口 和Web應用程序

+0

每當用戶類型的值到一個文本框,它永遠是一個字符串。 – 2011-03-17 16:33:26

回答

2

除非用戶告訴你的數據類型是什麼工作,你將只能通過以確定它試圖解析它到不同的類型,即使這樣你也不能保證它正確。

使用在首創置業的intdoubleDateTime和其他類型定義的不同TryParse方法,你可以看到,如果在字符串傳遞是可分析到以上的這些類型之一。

此時,您需要決定要使用哪種類型...由於您已經知道列的數據類型,因此您可以測試以查看是否可以解析爲該類型,如果不是,則拒絕輸入。

在所有情況下,該值都將是一個有效字符串(由用戶輸入),因爲這是所有控件的Text屬性的類型。

+0

@oded ..它的確是由於Text屬性,用戶輸入的值是字符串。我只是想做一個客戶端驗證,以提醒用戶有關爲過濾器Criteria傳遞的錯誤值。將嘗試解析到列類型。 – pKumar 2011-03-17 16:40:49

+0

@psobhan - 你可以看看[DataAnnotations](http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.aspx)來幫助解決這個問題。 – Oded 2011-03-17 16:43:02

0
if (Value is string) 
    //code to handle 
else if (value is int) 
//code to handle 

+0

@ Wegged-由於該值是從文本框中獲取的,因此數據類型始終是字符串。 – pKumar 2011-03-17 16:51:17

0

除非你想出如何識別所輸入的值的方式爲int,字符串或日期時間,沒有其他辦法。據我瞭解用戶總是輸入字符串。 我會用RegEx也許???如果你很清楚date-times/int/string是如何區別對方的。

+0

@ Tengiz - 也許我可以使用regEx來避免spl字符。 – pKumar 2011-03-17 16:46:32

+0

實際上,如果案例與這些3:int/string/datetime完全相關,那麼如果使用RegEx,則生活會更容易。至少他們的內容有所不同。什麼是spl字符? – Tengiz 2011-03-17 16:50:14

0

你的問題不是很清楚,但我猜你正在談論將一個變量轉換爲特定類型。

在你的情況,說TableName.ColumnName是一個整數,你會做這樣的事情:

string valueByUser = "23"; // Wherever this comes from. 

int number = 0; 

int.TryParse(valueByUser, out number); 

TableName.ColumnName = number; 

既然你會知道什麼的ColumnName的數據類型,你可以使用相應的TryParse來CONVER價值例如

decimal.TryParse() 
DateTime.TryParse() 
+0

@Jason-將嘗試解析基於列類型的值。 – pKumar 2011-03-17 16:48:12

0

不應爲如何在手解決具體問題的答案,似乎它可以完全通過使上一個更好的設計決策,避免用戶輸入值到該字段如何。

你說columName有一個特定的數據類型,但你允許用戶在表示層輸入任何值?這似乎有代碼味道。

您是否可以不在UI層執行某種形式的驗證?我想不出任何允許用戶輸入任何符合特定數據類型的值的實例。我會根據所選的columnName類型驗證輸入。

+0

@ cpedros - 我真的不是說那個columnName有一個特定的類型。 Itz,我可以得到用戶選擇的列的數據類型(基於列名稱)。它是用戶選擇'int'類型列的錯誤,並嘗試使用字符串值來檢查它。但想要一種簡單的方法來避免異常,從第一階段中防止異常。 – pKumar 2011-03-17 17:08:06

0

這是我用:

private string ParseString(string str) 
     { 

      bool boolValue; 
      Int32 intValue; 
      Int64 bigintValue; 
      decimal doubleValue; 
      DateTime dateValue; 

      // Place checks higher in if-else statement to give higher priority to type. 

      if (bool.TryParse(str, out boolValue)) 
       return "System_Boolean"; 
      else if (Int32.TryParse(str, out intValue)) 
       return "System_Int32"; 
      else if (Int64.TryParse(str, out bigintValue)) 
       return "System_Int64"; 
      else if (decimal.TryParse(str, out doubleValue)) 
       return "System_Decimal"; 
      else if (DateTime.TryParse(str, out dateValue)) 
       return "System_DateTime"; 
      else return "System_String"; 

     } 
相關問題