, 나는 처음부터 작성한 작업 방법입니다. 더 this list에 따라
당신은 스키마 정보를지도하는이 클래스를 사용할 수
, 당신은 추가 할 수 있습니다 : 각 테이블의 모든 열을 나열하는 DataReader.GetSchemaTable()
을 사용하고
는
Public Class Table
Public Property DatabaseName As String
Public Property TableName As String
Public Property Schema As String
Public Property FullName As String
Public Property AllColumns As New List(Of TableColumn)
Public Overrides Function ToString() As String
Return FullName
End Function
End Class
Public Class TableColumn
Public Property ColumnName As String
Public Property DataType As Type
Public Property Size As Int32
Public Property ColumnOrdinal As Int32
Public Property AllowDBNull As Boolean
Public Property IsAutoIncrement As Boolean
Public Overrides Function ToString() As String
Return String.Format("{0}({1})", ColumnName, DataType.ToString())
End Function
End Class
이 코드는 모든 테이블을 읽고의 모든 목록에 열 :
Dim allTables As New List(Of Table)
Using con As New SqlConnection(My.Settings.RM2ConnectionString) ' use your connection-string '
Using sysTblCommand As New SqlCommand("SELECT [Database]=DB_NAME(DB_ID()),FullName='['+SCHEMA_NAME(schema_id)+'].['+name+']',[Schema]=SCHEMA_NAME(schema_id),Name FROM sys.tables ORDER BY schema_id,name", con)
con.Open()
Using readerSys = sysTblCommand.ExecuteReader()
While readerSys.Read()
Dim table As New Table()
table.DatabaseName = readerSys.GetString(0)
table.FullName = readerSys.GetString(1)
table.Schema = readerSys.GetString(2)
table.TableName = readerSys.GetString(3)
allTables.Add(table)
End While
End Using
For Each table In allTables
Using tblCommand As New SqlCommand("SELECT * FROM " & table.ToString(), con)
tblCommand.CommandTimeout = 0
Using rd = tblCommand.ExecuteReader()
Dim schemaTable As DataTable = rd.GetSchemaTable()
For Each row As DataRow In schemaTable.Rows
Dim col As New TableColumn()
col.ColumnName = row.Field(Of String)("ColumnName")
col.DataType = row.Field(Of Type)("DataType")
col.Size = row.Field(Of Int32)("ColumnSize")
col.ColumnOrdinal = row.Field(Of Int32)("ColumnOrdinal")
col.AllowDBNull = row.Field(Of Boolean)("AllowDBNull")
col.IsAutoIncrement = row.Field(Of Boolean)("IsAutoIncrement")
table.AllColumns.Add(col)
Next
End Using
End Using
Next
End Using
End Using
당신은 [`SqlDataReader.GetSchemaTable`] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getschematable (V를 사용할 수 있습니다
= vs.90) .aspx). –
readerX.GetSchemaTable()이 줄을 사용했지만'SELECT name FROM sys.tables'를 사용했기 때문에 – Kirk
이라는 테이블 이름 만 반환하고 있지만 sys에서 반환 된 실제 테이블에서는 SELECT *를 사용해야합니다. 테이블 '대신. –