开发者

Check if Datatype from schematable and user data match

I'm having a little problem with checking user inputs. I want to check if an input is of a "given" datatype. The problem is in the "given" as you might have guessed :-)

I get an SQLschematable via a Datareader. The database can be exchanged, for the program should be able to work with any foreign database. Therefore I don't know anything else about it. The schematable lists all columns from the database table. It contains a column "DataType" where the .Net datatype corresponding to the databases column datatypes are listed.

The user can specify a data input for each column in a datagridview. That is: the user is given the schematable and an editable extra column.

Now I want to check if the given user input matches the .Net datatype. Normaly I would check this by using something like

Input is String

or

String test = I开发者_如何学编程nput as String;
if (test = null) ....

but the problem is in creating the Datatype (i.e. the String)

if I do something like this:

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 not recognized as a datatype and the "is" command is not used properly.

I also tried the more direct aproach with

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

and many similar lines, but it seems this "is" command only works with types that are directly referenced form System.Type, like in "is String".

How could one solve this?

thanks in advance, Peter


Something like this might be helpful

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

        // Its not a type
    }


This depends a bit whether the actual row-columns have a valid datatype (from the database) or all columns contain string types (as a generic user input type)

In practice I would go for a list of

Try
  Convert.ToX
Catch
 'oops not type X
End try

For all expected datatypes with 'string' as a catch all. Ordered a bit from Integer to float etc so the datatypes are a bit restricted with some Money and Date types added for completeness.

Sure this is a dirty list but there isn't any other way that I know of.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜