Entrar

Erro: O método GetSchemaTable do objeto SqlDataReader retorna o nome de coluna errada

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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

307512
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
O método GetSchemaTable do objeto SqlDataReader retorna colunas, BaseServerName e BaseCatalogName propriedades. No entanto, SqlDataReader.GetSchemaTable deve retornar apenas BaseCatalogName .
Causa
Em adição às colunas que estão descritas no Microsoft .NET Framework Class Library Software Development Kit (SDK) documentação, SqlDataReader.GetSchemaTable retorna uma coluna chamada BaseServerName . BaseServerName é o nome da instância do Microsoft SQL Server que usa SqlDataReader . BaseServerName aparece antes BaseCatalogName na DataTable que descreve os metadados de coluna.
Resolução
Como esse problema não ocorre com o objeto OleDbDataReader , você pode usar OleDbDataReader para obter as informações SchemaTable .
Situação
A Microsoft confirmou que este é um bug no Microsoft produtos que estão listados no início deste artigo.
Mais Informações

Passos para reproduzir o problema

Usando o Visual Basic .NET

  1. Abra o Microsoft Visual Studio .NET e criar um novo projeto Visual Basic Console Application.
  2. Adicione o seguinte código acima módulo Module1:
    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 seqüência de conexão conforme apropriado para o Microsoft SQL Server.
  5. Pressione a tecla F5 para compilar e executar o projeto. Observe que todas as colunas de SchemaTable são exibidas na janela do console. Além disso, observe que BaseServerName também é exibida antes BaseCatalogName .

Usando o .NET translation from VPE for Csharp Visual

  1. Inicie o Visual Studio .NET e crie um novo Visual translation from VPE for Csharp .NET Console Application projeto.
  2. Adicione o seguinte código ao Class1 antes do espaço para nome ConsoleApplication1 :
    using System.Data;using System.Data.SqlClient;					
  3. Adicione o seguinte código ao procedimento principal (seqüência de caracteres [] args) 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 seqüência de conexão conforme apropriado para o SQL Server.
  5. Pressione a tecla F5 para compilar e executar o projeto. Observe que todas as colunas de SchemaTable são exibidas na janela do console. Além disso, observe que BaseServerName também é exibida antes BaseCatalogName .

Usando o Visual C++ .NET

  1. Inicie o Visual Studio.NET e crie um Visual C++ .NET Managed Application projeto.
  2. Adicione o seguinte código antes do 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 seqüência de conexão conforme apropriado para o SQL Server.
  5. Pressione a tecla F5 para compilar e executar o projeto. Observe que todas as colunas de SchemaTable são exibidas na janela do console. Além disso, observe que BaseServerName também é exibida antes BaseCatalogName .

Usando o Visual J# .NET

  1. Abra o Microsoft Visual Studio .NET e criar um novo projeto de aplicativo Visual J# Console.
  2. Adicione o seguinte código para class1:
    import System.Data.*;import System.Data.SqlClient.*;					
  3. Adicione o seguinte código para 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 seqüência de conexão conforme apropriado para o SQL Server.
  5. Pressione a tecla F5 para compilar e executar o projeto. Observe que todas as colunas de SchemaTable são exibidas na janela do console. Além disso, observe que BaseServerName também é exibida antes BaseCatalogName .
kbreadme

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 307512 - Última Revisão: 02/24/2014 12:51:55 - Revisão: 1.18

  • 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
  • kbnosurvey kbarchive kbmt kbtshoot kbvs2002sp1sweep kbbug kbpending kbreadme kbsqlclient kbsystemdata KB307512 KbMtpt
Comentários