BUG: SqlDataReader의 GetSchemaTable()이 잘못된 열 이름을 반환한다

기술 자료 번역 기술 자료 번역
기술 자료: 307512 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR307512
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

현상

SqlDataReader 개체의 GetSchemaTable 메서드가 열, BaseServerName 및 BaseCatalogName 속성을 반환합니다. 하지만 SqlDataReader.GetSchemaTable은 BaseCatalogName만 반환해야 합니다.

원인

SqlDataReader.GetSchemaTable은 Microsoft .NET Framework Class Library Software Development Kit(SDK) 설명서에 나와 있는 열 외에 BaseServerName 열도 반환합니다. BaseServerNameSqlDataReader가 사용하는 Microsoft SQL Server 인스턴스의 이름입니다. BaseServerNameDataTable에서 열 메타데이터를 설명하는 BaseCatalogName 앞에 나타납니다.

해결 방법

OleDbDataReader 개체에는 이 문제가 발생하지 않으므로 OleDbDataReader를 사용하여 SchemaTable 정보를 얻을 수 있습니다.

현재 상태

Microsoft는 본 문서의 시작 부분에 나열한 제품에서 이 문제를 확인했습니다.

추가 정보

문제를 재현하는 방법

Visual Basic .NET을 사용하는 경우

  1. Microsoft Visual Studio .NET을 열고 새로운 Visual Basic 콘솔 응용 프로그램 프로젝트를 만듭니다.
  2. Module1 모듈 앞에 다음 코드를 추가합니다.
    Imports System.Data.SqlClient
  3. Sub Main() 프로시저에 다음 코드를 추가합니다.
    Dim cnNwind As New SqlConnection("Data Source=ServerName;user id=username;" & _
                                     "Password=password;Initial Catalog=Northwind;")
            Dim cmd As New SqlCommand("Select * from Customers", cnNwind)
            cnNwind.open()
    
            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader
            Dim i As Integer
            For i = 0 To dr.GetSchemaTable.Columns.Count - 1
    
            System.Console.WriteLine(dr.GetSchemaTable.Columns(i).ColumnName)
    
            Next
            System.Console.Read()        
            dr.Close()
            cnNwind.Close()
  4. 해당 Microsoft SQL Server에 맞게 연결 문자열을 수정합니다.
  5. F5 키를 눌러 프로젝트를 컴파일하고 실행합니다. SchemaTable의 모든 열이 콘솔 창에 나타납니다. 또한 BaseServerNameBaseCatalogName 앞에 나타납니다.

Visual C# .NET을 사용하는 경우

  1. Visual Studio .NET을 열고 새로운 Visual C# 콘솔 응용 프로그램 프로젝트를 만듭니다.
  2. Class1의 ConsoleApplication1 네임스페이스 앞에 다음 코드를 추가합니다.
    using System.Data;
    using System.Data.SqlClient;
  3. static void Main(string[] args) 프로시저 앞에 다음 코드를 추가합니다.
    SqlConnection cnNwind = new SqlConnection("Data Source=servername;user id=username;
                                              Password=password;Initial Catalog=Northwind;");
            SqlCommand cmd = new SqlCommand("Select * from Customers", cnNwind);
    	
            cnNwind.Open();
    
            SqlDataReader dr ;
    
    			dr = cmd.ExecuteReader();
    			DataTable dt = dr.GetSchemaTable();
    				for (int i=0;i<dt.Columns.Count;i++)
    				{
    					System.Console.WriteLine(dt.Columns[i]);
    				}
    				System.Console.Read();
    
                                    dr.Close();
                                    cnNwind.Close();
    			
  4. 해당 SQL 서버에 맞게 연결 문자열을 수정합니다.
  5. F5 키를 눌러 프로젝트를 컴파일하고 실행합니다. SchemaTable의 모든 열이 콘솔 창에 나타납니다. 또한 BaseServerNameBaseCatalogName 앞에 나타납니다.

Visual C++ .NET을 사용하는 경우

  1. Visual Studio .NET을 열고 Visual C++ 관리되는 응용 프로그램 프로젝트를 만듭니다.
  2. 다음 코드를 int _tmain(void) 프로시저 앞에 추가합니다.
    #using <System.dll>
    #using <System.Data.dll>
    
    using namespace System;
    using namespace System::Data;
    using namespace System::Data::SqlClient ;
  3. int -tmain(void) 프로시저에 다음 코드를 추가합니다.
    SqlConnection *cnNwind = new SqlConnection("Data Source=servername;user id=username;
                                               Password=password;Initial Catalog=Northwind;");
        SqlCommand *cmd = new SqlCommand("Select * from Customers", cnNwind);
    		 cnNwind->Open();
    
            SqlDataReader *dr ;
    		
    			dr = cmd->ExecuteReader();
    			DataTable *dt = dr->GetSchemaTable();
    			int i;
    			for (i=0;i<dt->Columns->Count;i++)
    				{
                                     Console::WriteLine(dt->Columns->Item [i]);
    				}
    				System::Console::Read();
    				dr->Close();
    				cnNwind->Close();
    			
                                    return 0;
  4. 해당 SQL 서버에 맞게 연결 문자열을 수정합니다.
  5. F5 키를 눌러 프로젝트를 컴파일하고 실행합니다. SchemaTable의 모든 열이 콘솔 창에 나타납니다. 또한 BaseServerNameBaseCatalogName 앞에 나타납니다.

속성

기술 자료: 307512 - 마지막 검토: 2014년 2월 24일 월요일 - 수정: 1.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ADO .NET(.NET Framework에 포함)
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.1
키워드:?
kbnosurvey kbarchive kbbug kbpending kbreadme KB307512

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