방법: Visual Basic .NET GetOleDbSchemaTable 메서드를 사용하여 Excel에서 메타데이터 검색

기술 자료 번역 기술 자료 번역
기술 자료: 318373 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

이 단계별 문서에서는 Jet에 대한 Microsoft OLE DB 관리 공급자 및 Microsoft OLE DB 공급자를 사용하여 GetOleDbSchemaTable 메서드를 사용하여 자동으로 데이터 원본 테이블 및 열 메타데이터를 검색할 방법을 설명합니다.

Microsoft .NET Framework System.Data.OleDb 클래스에 의해 노출되는 GetOleDbSchemaTable 메서드를 이전 버전의 Microsoft ActiveX 데이터 개체 OpenSchema 메서드는 .NET 대신하는 것입니다 (ADO).

다음 기술 설명

ADO.NET을 사용하여 Excel 데이터 원본에 연결한 후 후 GetOleDbSchemaTable 사용하여 메타데이터 테이블 목록을 추출하는 선택한 테이블의 열 메타데이터를 얻기 위해 서로 다른 인수를 사용하여 동일한 메서드를 사용하십시오. DataGridTableStyle 개체를 사용하여 레이아웃 및 데이터 표에 쿼리 결과에 서식을 수도 있습니다.

요구 사항

다음은 권장되는 하드웨어, 소프트웨어, 네트워크 인프라 및 필요한 서비스 팩의 목록입니다.
  • Visual Studio .NET 호환 Microsoft Windows 운영 체제에 설치된
  • 일부 행 및 열의 데이터 Microsoft Excel 통합 문서 (.xls) 파일을 하나 이상
이 문서에서는 다음 항목 적어도 기본 지식이 있다고 가정합니다.
  • Visual Basic .NET
  • ADO.NET 데이터 액세스
  • Excel 통합 문서 및 워크시트

예제

  1. Microsoft Visual Studio .NET 시작하고 새 Visual Basic .NET Windows 응용 프로그램 프로젝트를 만듭니다.
  2. 기본 폼 (Form1) 세 단추 컨트롤과 두 DataGrid 컨트롤에 추가하십시오. 각각 메타데이터 검색 , 서식 테이블 목록 열 큰 서식 단추 컨트롤의 Text 속성을 변경하십시오.
  3. 폼의 코드 모듈을 전환하여 맨 위에 다음 가져오기 문을 추가합니다:
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.ComponentModel
  4. Inherits System.Windows.Forms.Form "줄 끝에서 다음 모듈 수준 선언을 Form 클래스를 삽입하십시오. 일부 행 및 열의 데이터 포함하는 Excel 통합 문서 파일을 가리키도록 필요에 따라 연결 문자열을 조정할.
        Dim cn As OleDbConnection
        Dim strCn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=c:\test.xls;Extended Properties=Excel 8.0"
        Dim dtTables As DataTable
        Dim WithEvents cm As CurrencyManager
        Dim dtColumns As DataTable
        Dim dvColumns As DataView
  5. "Windows Form 디자이너에서 생성한 코드" 영역 뒤에 다음 코드를 클래스에 삽입하십시오. 이 코드는 테이블 및 열 목록을 로드할 수 GetOleDbSchemaTable 호출하고 DataGrid 컨트롤에 채웁니다 선택한 테이블을 변경할 때 열 목록을 업데이트합니다.
        Private Sub Button1_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button1.Click
            Call GetTablesList()
        End Sub
    
        Private Sub GetTablesList()
            cn = New OleDbConnection(strCn)
            cn.Open()
            dtTables = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
            DataGrid1.DataSource = dtTables
            DataGrid1.ReadOnly = True
            cn.Close()
            Call GetColumnsList()
        End Sub
    
        Private Sub GetColumnsList()
            If cm Is Nothing Then
                cm = CType(Me.BindingContext(dtTables), CurrencyManager)
            End If
            Dim r As Integer = cm.Position
            Dim strTable As String = dtTables.Rows(r)("TABLE_NAME")
            cn = New OleDbConnection(strCn)
            cn.Open()
            dtColumns = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, _
                New Object() {Nothing, Nothing, strTable, Nothing})
            dvColumns = New DataView(dtColumns)
            dvColumns.Sort = "ORDINAL_POSITION"
            DataGrid2.DataSource = dvColumns
            DataGrid2.ReadOnly = True
            cn.Close()
        End Sub
    
        Private Sub cm_PositionChanged(ByVal sender As Object, _
                ByVal e As System.EventArgs) Handles cm.PositionChanged
            Call GetColumnsList()
        End Sub
  6. 레이아웃 및 TableStyles 사용하여 DataGrid 표 서식을 다음 코드를 삽입하십시오. 기본이 아닌 날짜 열에 서식을 쉽게 PropertyDescriptor 사용 참고.
        Private Sub Button2_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button2.Click
            Call FormatTablesGrid(dtTables)
        End Sub
    
        Private Sub FormatTablesGrid(ByVal dt2format As DataTable)
            Dim gs As DataGridTableStyle = New DataGridTableStyle()
            gs.MappingName = dt2format.TableName
    
            Dim cs As DataGridColumnStyle = New DataGridTextBoxColumn()
            With cs
                .MappingName = "TABLE_NAME"
                .HeaderText = "Table Name"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "TABLE_TYPE"
                .HeaderText = "Table Type"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            Dim cm As CurrencyManager = CType(Me.BindingContext(dt2format), CurrencyManager)
            Dim pd As PropertyDescriptor = cm.GetItemProperties()("DATE_CREATED")
    
            cs = New DataGridTextBoxColumn(pd, "d")
            With cs
                .MappingName = "DATE_CREATED"
                .HeaderText = "Date Created"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            cm = CType(Me.BindingContext(dt2format), CurrencyManager)
            pd = cm.GetItemProperties()("DATE_MODIFIED")
    
            cs = New DataGridTextBoxColumn(pd, "d")
            With cs
                .MappingName = "DATE_MODIFIED"
                .HeaderText = "Date Modified"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            DataGrid1.TableStyles.Add(gs)
            Me.Button2.Enabled = False
    
        End Sub
  7. 열 서식 및 레이아웃을 다음 코드를 삽입합니다 TableStyle 사용하여 DataGrid :
        Private Sub Button3_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button3.Click
            Call FormatColumnsGrid(dtColumns)
        End Sub
    
        Private Sub FormatColumnsGrid(ByVal dt2format As DataTable)
            Dim gs As DataGridTableStyle = New DataGridTableStyle()
            gs.MappingName = dtColumns.TableName
    
            Dim cs As DataGridColumnStyle = New DataGridTextBoxColumn()
            With cs
                .MappingName = "COLUMN_NAME"
                .HeaderText = "Column Name"
                .Width = 100
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "ORDINAL_POSITION"
                .HeaderText = "Ordinal Position"
                .Width = 100
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "DATA_TYPE"
                .HeaderText = "Data Type"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "CHARACTER_MAXIMUM_LENGTH"
                .HeaderText = "Text Length"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            cs = New DataGridTextBoxColumn()
            With cs
                .MappingName = "NUMERIC_PRECISION"
                .HeaderText = "Numeric Precision"
                .Width = 75
            End With
            gs.GridColumnStyles.Add(cs)
    
            DataGrid2.TableStyles.Add(gs)
            Me.Button3.Enabled = False
    
        End Sub
  8. 프로젝트를 실행하십시오.
  9. 모든 GetOleDbSchemaTable Excel 통합 문서의 각 테이블에 대해 반환되는 정보 열이 테이블 목록에서 (DataGrid1) 채우기 위해 메타데이터 검색 클릭하십시오. 동시에 모든 반환되는 정보 열이 테이블 목록에서 첫 번째 테이블의 열에 대한 목록에서 (DataGrid2) 채워집니다.
  10. 테이블 목록에서 다른 테이블을 선택하십시오. 구현할 수 있는 cm_PositionChanged 이벤트 처리기의 때문에 선택한 테이블의 열을 표시하려면 목록 변경.
  11. 정의하고 DataGrid1 한 TableMappingStyle 적용할 서식 테이블 목록 을 클릭하십시오. 이 열 머리글 "친숙한" 더 만들고 네 열의 GetOleDbSchemaTable 반환한 9개의 열에서 유용한 데이터 표시합니다. 이 열에 표시됩니다.
    테이블_이름
    TABLE_TYPE
    DATE_CREATED
    DATE_MODIFIED
    이러한 빈 열이 표시되지 않습니다.
    TABLE_CATALOG
    TABLE_SCHEMA
    TABLE_GUID
    설명
    TABLE_PROPID
  12. 서식 열 목록 을 정의해야 하고 DataGrid2 한 TableMappingStyle 적용할 클릭하십시오. 이 열 머리글 "친숙한" 더 사용하면 다음 5 가장 유용한 열에 대해서만 GetOleDbSchemaTable 반환한 28 열에서 데이터 표시합니다.
    COLUMN_NAME
    ORDINAL_POSITION
    데이터_형식
    MAXIMUM_CHARACTER_LENGTH
    NUMERIC_PRECISION
    이러한 대부분 빈 열이 표시되지 않습니다.
    TABLE_CATALOG
    TABLE_SCHEMA
    이미 알려진 TABLE_NAME
    COLUMN_GUID
    COLUMN_PROPID
    항상 false COLUMN_HASDEFAULT
    COLUMN_DEFAULT
    COLUMN_FLAGS
    IS_NULLABLE (항상 true)
    TYPE_GUID
    CHARACTER_OCTET_LENGTH
    NUMERIC_SCALE
    DATETIME_PRECISION
    CHARACTER_SET_CATALOG
    CHARACTER_SET_SCHEMA
    CHARACTER_SET_NAME
    COLLATION_CATALOG
    COLLATION_SCHEMA
    데이터 정렬 이름
    DOMAIN_CATALOG
    DOMAIN_SCHEMA
    도메인 이름
    설명
  13. 다른 테이블을 선택하려면 DataGrid1 다른 행을 클릭하십시오. 목록에 자동으로 업데이트됩니다. 각 DataGrid 이전에 적용된 TableStyles 그대로 적용됩니다.

문제 해결

  • Excel 데이터 원본에 대한 GetOleDbSchemaTable 반환하는 열 데이터 형식을 고전적인 ADO OpenSchema 메서드는 반환하는 데이터 형식을 모든 경우에 동일한있지 않습니다.
    표 축소표 확대
    열 형식고전적인 ADOADO.NET (OLE DB)
    숫자5 adDouble5 OleDbType.Double
    통화6 adCurrency6 OleDbType.Currency
    날짜/시간7 adDate7 OleDbType.Date
    부울11 adBoolean11 OleDbType.Boolean
    텍스트 < 255202 adVarWChar130 OleDbType.WChar
    메모203 adLongVarWChar130 OleDbType.WChar
  • GetOleDbSchemaTable , OpenSchema 같은 있지만 사실 데이터 또는 열 머리글이 있는 단일 열에 "F1" 빈 Excel 워크시트에서 반환합니다.

참조

자세한, Microsoft 기술 자료에 있는 문서를 보려면 다음 문서 번호를 누릅니다.
257819HOWTO: Visual Basic 또는 VBA를 Excel 데이터를 ADO 사용

속성

기술 자료: 318373 - 마지막 검토: 2003년 9월 3일 수요일 - 수정: 2.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET 1.1
  • Microsoft ADO.NET 1.0
키워드:?
kbmt kbhowtomaster kbprovider KB318373 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com