Você está offline; aguardando reconexão

Erro: O método GetSchemaTable do objecto SqlDataReader devolve 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 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
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
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 .
kbreadme

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 307512 - Última Revisão: 02/24/2014 20:22:56 - 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