GetProviderSpecificFieldType() in .NET 2.0 Whidbey

Back with Classic ADO, you could always get the datatype of the field in a recordset (adVarChar and such).  I wanted to do that again and get the data in the form of the System.Data.SqlTypes  I never did find a way to do that under .NET 1.x.  With .NET 2.0 Whidbey, I can use the GetProviderSpecificFieldType() method to get the type of the field as defined by the System.Data.SqlTypes.  Here is some quicky code that I wrote to do this:

        Dim i As Integer

        Dim strSql As String = "select * from tblTest where 1=2"

        Dim scsbObj As New SqlConnectionStringBuilder(Me.gstrSyncString)

        Dim sqlCn As New SqlConnection(scsbObj.ConnectionString)

        Dim sqlCm As New SqlCommand(strSql, sqlCn)

        Dim sqlDr As SqlDataReader

       

        Try

            sqlCn.Open()

            sqlDr = sqlCm.ExecuteReader()

            sqlDr.Read()

            For i = 0 To (sqlDr.FieldCount - 1)

                MsgBox(sqlDr.GetName(i) + vbCrLf + "SqlType: " + _

                    Convert.ToString(sqlDr.GetProviderSpecificFieldType(i)) + vbCrLf + _

                    "Database Type: " + Convert.ToString(sqlDr.GetDataTypeName(i)) + vbCrLf + _

                    ".NET Type: " + Convert.ToString(sqlDr.GetFieldType(i)))

            Next

            If Not (sqlDr.IsClosed = True) Then

                sqlDr.Close()

            End If

            sqlDr.Dispose()

            sqlDr = Nothing

        Catch sqlExc As SqlException

            MsgBox("Error: " & sqlExc.Message.ToString())

        Finally

            sqlCm.Dispose()

            sqlCm = Nothing

            If sqlCn.State <> ConnectionState.Closed Then

                sqlCn.Close()

            End If

            sqlCn.Dispose()

            sqlCn = Nothing

        End Try

Enjoy yourself.  I have no idea if the code works on Win64 or not.  I have only tested it on Win32 talking to a Sql Server 2005 database.

Wally

No Comments