#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 — это не одно и то же.