2011-03-17 48 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"; 

     } 
相关问题