Erro: O método GetSchemaTable do objecto SqlDataReader devolve o nome de coluna errada

Traduções de Artigos Traduções de Artigos
Artigo: 307512 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

O método GetSchemaTable do objecto SqlDataReader devolve colunas, BaseServerName e BaseCatalogName propriedades. No entanto, SqlDataReader.GetSchemaTable só deve devolver BaseCatalogName .

Causa

Juntamente com as colunas que são descritas no Microsoft .NET Framework classe biblioteca Software Development Kit (SDK) documentação, SqlDataReader.GetSchemaTable devolve uma coluna denominada BaseServerName . BaseServerName é o nome da instância do Microsoft SQL Server utiliza SqlDataReader . BaseServerName aparece antes BaseCatalogName no DataTable que descreve os metadados de coluna.

Resolução

Uma vez que este problema não ocorre com o objecto OleDbDataReader , pode utilizar OleDbDataReader para obter as informações SchemaTable .

Ponto Da Situação

A Microsoft confirmou que este é um erro no Microsoft produtos listados no início deste artigo.

Mais Informação

Passos para reproduzir o comportamento

Utilizar o Visual Basic .NET

  1. Abra o Microsoft Visual Studio .NET e crie um novo projecto de aplicação de consola do Visual Basic.
  2. Adicione o seguinte código acima módulo Módulo1:
    Imports System.Data.SqlClient
    					
  3. Adicione o seguinte código ao procedimento 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. Modificar a cadeia de ligação conforme apropriado para o Microsoft SQL Server.
  5. Prima a tecla F5 para compilar e executar o projecto. Repare que todas as colunas de SchemaTable aparecem na janela da consola. Para além disso, repare que também aparece BaseServerName antes BaseCatalogName .

Utilizando o Visual C#. NET

  1. Inicie o Visual Studio .NET e crie um novo Visual C# .NET projecto de aplicação da consola.
  2. Adicione o seguinte código ao Aula1 antes do espaço de nomes ConsoleApplication1 :
    using System.Data;
    using System.Data.SqlClient;
    					
  3. Adicione o seguinte código ao procedimento principal ([] argumentos de cadeia) void estático:
    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. Modificar a cadeia de ligação conforme apropriado para o SQL Server computador.
  5. Prima a tecla F5 para compilar e executar o projecto. Repare que todas as colunas de SchemaTable aparecem na janela da consola. Para além disso, repare que também aparece BaseServerName antes BaseCatalogName .

Utilizando o Visual C++. NET

  1. Inicie o Visual Studio .NET e crie um Visual C++ .NET projecto de aplicação gerida.
  2. Adicione o seguinte código antes o procedimento de _tmain(void) int:
    #using <System.dll>
    #using <System.Data.dll>
    
    using namespace System;
    using namespace System::Data;
    using namespace System::Data::SqlClient ;
    					
  3. Adicione o seguinte código ao procedimento-tmain(void) int:
    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. Modificar a cadeia de ligação conforme apropriado para o SQL Server computador.
  5. Prima a tecla F5 para compilar e executar o projecto. Repare que todas as colunas de SchemaTable aparecem na janela da consola. Para além disso, repare que também aparece BaseServerName antes BaseCatalogName .

Utilizando o Visual J#. NET

  1. Abra o Microsoft Visual Studio .NET e crie um novo projecto de aplicação Visual J# consola.
  2. Adicione o seguinte código para class1:
    import System.Data.*;
    import System.Data.SqlClient.*;
    					
  3. Adicione o seguinte código ao principal:
    	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.get_Columns().get_Count(); i++)
    		{
    			DataColumnCollection dcc = dt.get_Columns();
    			System.Console.WriteLine(dcc.get_Item(i));
    		}
    		System.Console.Read();
    	
    		dr.Close();
    		cnNwind.Close();
    					
  4. Modificar a cadeia de ligação conforme apropriado para o SQL Server computador.
  5. Prima a tecla F5 para compilar e executar o projecto. Repare que todas as colunas de SchemaTable aparecem na janela da consola. Para além disso, repare que também aparece BaseServerName antes BaseCatalogName .

Propriedades

Artigo: 307512 - Última revisão: 24 de fevereiro de 2014 - Revisão: 1.18
A informação contida neste artigo aplica-se a:
  • Microsoft ADO.NET 2.0
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual J# .NET 2003 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 2.0
  • Microsoft Visual Basic 2005
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual J# 2005 Express Edition
Palavras-chave: 
kbnosurvey kbarchive kbmt kbtshoot kbvs2002sp1sweep kbbug kbpending kbreadme kbsqlclient kbsystemdata KB307512 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 307512

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