Home All Groups Group Topic Archive Search About

convert DataColumn.GetType() into a DbType or SqlDbType?

Author
15 Nov 2006 9:32 PM
Chris Bordeman
I have a DataColumn, want to derive the DbType.  I can do column.GetType()
but that's a system type, not a db type.  How do I convert it to the
corresponding type?

Thanks much!

Chris B.

Author
16 Nov 2006 9:34 AM
Chester
Hi Chris Bordeman,

Its not possible to get the DBType via GetType(). You need to have a mapping
to get the relevent type. For eg,

private static Hashtable dbTypeTable;

private SqlDbType ConvertToDbType(Type t)
{
    if(dbTypeTable == null)
    {
        dbTypeTable = new Hashtable();
        dbTypeTable.Add(typeof(System.Boolean),  SqlDbType.Bit);
        dbTypeTable.Add(typeof(System.Int16),    SqlDbType.SmallInt);
        dbTypeTable.Add(typeof(System.Int32),    SqlDbType.Int);
        dbTypeTable.Add(typeof(System.Int64),    SqlDbType.BigInt);
        dbTypeTable.Add(typeof(System.Double),    SqlDbType.Float);
        dbTypeTable.Add(typeof(System.Decimal),    SqlDbType.Decimal);
        dbTypeTable.Add(typeof(System.String),    SqlDbType.VarChar);
        dbTypeTable.Add(typeof(System.DateTime), SqlDbType.DateTime);
        dbTypeTable.Add(typeof(System.Byte[]),    SqlDbType.VarBinary);
        dbTypeTable.Add(typeof(System.Guid),    SqlDbType.UniqueIdentifier);
    }
SqlDbType dbtype;
    try
    {
        dbtype = (SqlDbType)dbTypeTable[t];
    }
    catch
    {
        dbtype = SqlDbType.Variant;
    }
    return dbtype;   
}

can be used to get the type.

Cheers,
Chester


Show quote
"Chris Bordeman" wrote:

> I have a DataColumn, want to derive the DbType.  I can do column.GetType()
> but that's a system type, not a db type.  How do I convert it to the
> corresponding type?
>
> Thanks much!
>
> Chris B.
>
>
>
Author
16 Nov 2006 6:54 PM
Chris Bordeman
Gotcha, thanks for the mappings.

Show quote
"Chester" <chestermr@community.nospam> wrote in message
news:08FDC800-AF84-4D12-8644-A1B76D807734@microsoft.com...
> Hi Chris Bordeman,
>
> Its not possible to get the DBType via GetType(). You need to have a
> mapping
> to get the relevent type. For eg,
>
> private static Hashtable dbTypeTable;
>
> private SqlDbType ConvertToDbType(Type t)
> {
> if(dbTypeTable == null)
> {
> dbTypeTable = new Hashtable();
> dbTypeTable.Add(typeof(System.Boolean),  SqlDbType.Bit);
> dbTypeTable.Add(typeof(System.Int16), SqlDbType.SmallInt);
> dbTypeTable.Add(typeof(System.Int32), SqlDbType.Int);
> dbTypeTable.Add(typeof(System.Int64), SqlDbType.BigInt);
> dbTypeTable.Add(typeof(System.Double), SqlDbType.Float);
> dbTypeTable.Add(typeof(System.Decimal), SqlDbType.Decimal);
> dbTypeTable.Add(typeof(System.String), SqlDbType.VarChar);
> dbTypeTable.Add(typeof(System.DateTime), SqlDbType.DateTime);
> dbTypeTable.Add(typeof(System.Byte[]), SqlDbType.VarBinary);
> dbTypeTable.Add(typeof(System.Guid), SqlDbType.UniqueIdentifier);
> }
> SqlDbType dbtype;
> try
> {
> dbtype = (SqlDbType)dbTypeTable[t];
> }
> catch
> {
> dbtype = SqlDbType.Variant;
> }
> return dbtype;
> }
>
> can be used to get the type.
>
> Cheers,
> Chester
>
>
> "Chris Bordeman" wrote:
>
>> I have a DataColumn, want to derive the DbType.  I can do
>> column.GetType()
>> but that's a system type, not a db type.  How do I convert it to the
>> corresponding type?
>>
>> Thanks much!
>>
>> Chris B.
>>
>>
>>
Author
18 Nov 2006 4:47 AM
Rahul
Hi Chester,
I was also trying to do the same in my application. But i got stuck
with few things.

Like if you have a currency column or a nvarchar column the gettype
function will return you decimal and string respectively.

Just wanted to check if you know have a work around for this.

Thanks,
Rahul

Chester wrote:
Show quote
> Hi Chris Bordeman,
>
> Its not possible to get the DBType via GetType(). You need to have a mapping
> to get the relevent type. For eg,
>
> private static Hashtable dbTypeTable;
>
> private SqlDbType ConvertToDbType(Type t)
> {
>     if(dbTypeTable == null)
>     {
>         dbTypeTable = new Hashtable();
>         dbTypeTable.Add(typeof(System.Boolean),  SqlDbType.Bit);
>         dbTypeTable.Add(typeof(System.Int16),    SqlDbType.SmallInt);
>         dbTypeTable.Add(typeof(System.Int32),    SqlDbType.Int);
>         dbTypeTable.Add(typeof(System.Int64),    SqlDbType.BigInt);
>         dbTypeTable.Add(typeof(System.Double),    SqlDbType.Float);
>         dbTypeTable.Add(typeof(System.Decimal),    SqlDbType.Decimal);
>         dbTypeTable.Add(typeof(System.String),    SqlDbType.VarChar);
>         dbTypeTable.Add(typeof(System.DateTime), SqlDbType.DateTime);
>         dbTypeTable.Add(typeof(System.Byte[]),    SqlDbType.VarBinary);
>         dbTypeTable.Add(typeof(System.Guid),    SqlDbType.UniqueIdentifier);
>     }
> SqlDbType dbtype;
>     try
>     {
>         dbtype = (SqlDbType)dbTypeTable[t];
>     }
>     catch
>     {
>         dbtype = SqlDbType.Variant;
>     }
>     return dbtype;
> }
>
> can be used to get the type.
>
> Cheers,
> Chester
>
>
> "Chris Bordeman" wrote:
>
> > I have a DataColumn, want to derive the DbType.  I can do column.GetType()
> > but that's a system type, not a db type.  How do I convert it to the
> > corresponding type?
> >
> > Thanks much!
> >
> > Chris B.
> >
> >
> >
Author
18 Nov 2006 4:48 AM
Rahul
Hi Chester,
I was also trying to do the same in my application. But i got stuck
with few things.

Like if you have a currency column or a nvarchar column the gettype
function will return you decimal and string respectively.

Just wanted to check if you know any work-around for this.

Thanks,
Rahul

Chester wrote:
Show quote
> Hi Chris Bordeman,
>
> Its not possible to get the DBType via GetType(). You need to have a mapping
> to get the relevent type. For eg,
>
> private static Hashtable dbTypeTable;
>
> private SqlDbType ConvertToDbType(Type t)
> {
>     if(dbTypeTable == null)
>     {
>         dbTypeTable = new Hashtable();
>         dbTypeTable.Add(typeof(System.Boolean),  SqlDbType.Bit);
>         dbTypeTable.Add(typeof(System.Int16),    SqlDbType.SmallInt);
>         dbTypeTable.Add(typeof(System.Int32),    SqlDbType.Int);
>         dbTypeTable.Add(typeof(System.Int64),    SqlDbType.BigInt);
>         dbTypeTable.Add(typeof(System.Double),    SqlDbType.Float);
>         dbTypeTable.Add(typeof(System.Decimal),    SqlDbType.Decimal);
>         dbTypeTable.Add(typeof(System.String),    SqlDbType.VarChar);
>         dbTypeTable.Add(typeof(System.DateTime), SqlDbType.DateTime);
>         dbTypeTable.Add(typeof(System.Byte[]),    SqlDbType.VarBinary);
>         dbTypeTable.Add(typeof(System.Guid),    SqlDbType.UniqueIdentifier);
>     }
> SqlDbType dbtype;
>     try
>     {
>         dbtype = (SqlDbType)dbTypeTable[t];
>     }
>     catch
>     {
>         dbtype = SqlDbType.Variant;
>     }
>     return dbtype;
> }
>
> can be used to get the type.
>
> Cheers,
> Chester
>
>
> "Chris Bordeman" wrote:
>
> > I have a DataColumn, want to derive the DbType.  I can do column.GetType()
> > but that's a system type, not a db type.  How do I convert it to the
> > corresponding type?
> >
> > Thanks much!
> >
> > Chris B.
> >
> >
> >

AddThis Social Bookmark Button