Как я могу определить тип данных строки таблицы SQL Server с помощью VB.Net

#odbc #oledb #sqlclient #getschema

#odbc #oledb #sqlclient #getschema

Вопрос:

Я работаю над некоторым кодом, который позволяет клиенту подключаться к различным внешним источникам данных, включая OLEDB, ODBC и SQL Server. В моем VB.NET код, если я настраиваю соединение с помощью system.data.oledb или system.data.odbc , я могу использовать методы system.data.oledb.oledbType or system.data.odbc.odbcType для проверки целых или двойных типов данных.

Например, во фрагменте кода ниже dr приведена строка данных из таблицы данных, заполненной с использованием метода OLEDB connection GetSchema .

 --- Start Example-------
If dr("Data_Type") = System.Data.OleDb.OleDbType.Integer Then
  ...
End
--- End Example-------
  

Существует аналогичное решение для system.data.odbc .

Однако, похоже, я не могу найти способ получить тип данных из таблицы строк данных, заполненной с помощью GetSchema метода SQLClient соединения.

Есть идеи?

Заранее спасибо.

Дэйв

Ответ №1:

Вот фрагмент, который загружает DataGridView. Вместо использования формы вы просто загрузите локальный DGV или используйте DbSchema, который является DataTable.

     Private Sub DataDictionaryToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataDictionaryToolStripMenuItem.Click
    If g.DBSchema Is Nothing Then
        Using con As New SqlConnection(g.OISConnectString)
            con.Open()
            g.DBSchema = con.GetSchema("Columns") ' full DB Schema
        End Using
    End If
    Dim frm As New frmSearch2
    frm.inDataView = New DataView(g.DBSchema) ' dv
    frm.inSQLName = "Database Schema"
    frm.Show()
End Sub
  

Если у вас есть существующий DataTable (например, g.DbSchema), вы можете использовать это:

     For Each col As DataColumn In g.DBSchema.Columns
        Debug.Print(col.DataType.ToString)
    Next
  

Но это вернет тип данных ADO (я думаю), а не тип данных SQL.

Комментарии:

1. Я уже переношу схему источника данных SQL в DataTable. Что я ищу, так это то, как исследовать строки таблицы и определить, является ли конкретная строка (столбец) числовым типом данных. Я могу сделать это для источников данных OLEDB и ODBC, используя сравнение с if (data_row(«Data_Type») = System.Data. OleDb.OleDbType. Целое число или if (data_row(«Data_Type») =System.Data.Odbc.OdbcType. Целое число. Что мне нужно, так это аналогичный метод проверки типа данных для подключения на основе SqlClient.

2. Вам придется доработать исходное сообщение — пожалуйста, предоставьте какой-нибудь код, с которым у вас возникли проблемы — не код, который работает в другом контексте. Также укажите, пытаетесь ли вы получить тип данных SQL или тип данных столбца datatable — это не одно и то же.