检查schematable中的Datatype和用户数据是否匹配



我在检查用户输入时遇到了一点问题。我想检查输入是否是"给定"数据类型。问题是在"给定",你可能已经猜到了:-)

我通过Datareader获得一个SQLschematable。数据库可以交换,因为程序应该能够与任何外国数据库一起工作。所以我对它一无所知。schematable列出了数据库表中的所有列。它包含一个列"DataType",其中列出了与数据库列数据类型对应的。net数据类型。

用户可以为datagridview中的每列指定一个数据输入。也就是说:给用户一个schematable表和一个可编辑的额外列。

现在我想检查给定的用户输入是否与。net数据类型匹配。通常我会使用

来检查
Input is String

String test = Input as String;
if (test = null) ....

,但问题是在创建数据类型(即字符串)

如果我这样做:

foreach (DataRow row in MyDataTable.Rows){
    System.Type t = (System.Type) row["DataType"];
    if (! ( ((Object) row["Input"]) is t ) ){
        MessageBox.Show("Error");
    }
}

than t不能被识别为数据类型,并且"is"命令没有正确使用。

我还尝试了更直接的

方法
foreach (DataRow row in MyDataTable.Rows){
  if ( ! (row[Input] is ((System.Type) row["DataType"] ))) ...

和许多类似的行,但似乎这个"is"命令只适用于直接从System引用的类型。输入,如"is String"

如何解决这个问题?

提前感谢,彼得。

像这样的东西可能会有帮助

try
    {
        object o = Convert.ChangeType(row["Input"], Type.GetType(row["DataType"]));
    }
    catch (Exception ex)
    {
        // Its not a type
    }

这取决于实际的行列是否具有有效的数据类型(来自数据库),或者所有列都包含字符串类型(作为通用的用户输入类型)

在实践中,我将使用 列表
Try
  Convert.ToX
Catch
 'oops not type X
End try

以'string'作为catch all的所有预期数据类型。从整型到浮点等排序了一个位,因此数据类型受到了一些限制,为了完整性增加了一些货币和日期类型。

当然,这是一个肮脏的列表,但我知道没有任何其他的方法。

相关内容

  • 没有找到相关文章

最新更新