Fehler: Die GetSchemaTable-Methode des SqlDataReader-Objekts gibt den falschen Spalte-Namen zurück

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 307512 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Die GetSchemaTable -Methode des SqlDataReader -Objekts zurückgegeben Spalten, die BaseServerName und BaseCatalogName Eigenschaften. SqlDataReader.GetSchemaTable sollte jedoch nur BaseCatalogName zurück.

Ursache

Zusätzlich zu den Spalten, die in Microsoft .NET Framework Class Library Software Development Kit (SDK) beschrieben werden-Dokumentation SqlDataReader.GetSchemaTable gibt eine Spalte namens BaseServerName zurück. BaseServerName ist der Name der Microsoft SQL Server-Instanz, die SqlDataReader verwendet. BaseServerName erscheint vor BaseCatalogName in der Datentabelle , die die Spaltenmetadaten beschreibt.

Lösung

Da dieses Problem nicht mit dem OleDbDataReader -Objekt auftritt, können Sie OleDbDataReader , um die SchemaTable -Informationen zu erhalten.

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel Microsoft-Produkten handelt.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

Verwenden von Visual Basic .NET

  1. Öffnen Sie Microsoft Visual Studio .NET und erstellen Sie ein neues Visual Basic-Konsolenanwendungsprojekt.
  2. Fügen Sie folgenden Code oben Module Module1:
    Imports System.Data.SqlClient
    					
  3. Fügen Sie den folgenden Code hinzu der Sub Main()-Prozedur:
    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. Ändern Sie die Verbindungszeichenfolge entsprechend Ihrer Microsoft SQL Server.
  5. Drücken Sie die Taste [F5], um das Projekt zu kompilieren und auszuführen. Beachten Sie, dass alle Spalten der SchemaTable im Konsolenfenster angezeigt. Beachten Sie außerdem, dass BaseServerName auch vor BaseCatalogName angezeigt wird.

Mithilfe von Visual c# .NET

  1. Starten Sie Visual Studio .NET und erstellen Sie eine neue Visual c#-Konsolenanwendungsprojekt.
  2. Fügen Sie den folgenden Code hinzu Class1 vor ConsoleApplication1 Namespace:
    using System.Data;
    using System.Data.SqlClient;
    					
  3. Fügen Sie der Prozedur statische void Main (String [] Args) folgenden Code hinzu:
    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. Ändern Sie die Verbindungszeichenfolge entsprechend Ihrer SQL Server-Computer.
  5. Drücken Sie die Taste [F5], um das Projekt zu kompilieren und auszuführen. Beachten Sie, dass alle Spalten der SchemaTable im Konsolenfenster angezeigt. Beachten Sie außerdem, dass BaseServerName auch vor BaseCatalogName angezeigt wird.

Mithilfe von Visual c++.NET

  1. Starten Sie Visual Studio .NET und erstellen Sie ein Visual C++ .NET verwaltetes Anwendungsprojekt.
  2. Fügen Sie folgenden Code vor der Int-_tmain(void)-Prozedur:
    #using <System.dll>
    #using <System.Data.dll>
    
    using namespace System;
    using namespace System::Data;
    using namespace System::Data::SqlClient ;
    					
  3. Fügen Sie an die Int-tmain(void)-Prozedur folgenden Code hinzu:
    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. Ändern Sie die Verbindungszeichenfolge entsprechend Ihrer SQL Server-Computer.
  5. Drücken Sie die Taste [F5], um das Projekt zu kompilieren und auszuführen. Beachten Sie, dass alle Spalten der SchemaTable im Konsolenfenster angezeigt. Beachten Sie außerdem, dass BaseServerName auch vor BaseCatalogName angezeigt wird.

Mithilfe von Visual j# .NET

  1. Öffnen Sie Microsoft Visual Studio .NET, und erstellen Sie ein neues Visual J#-Konsolenanwendung-Projekt.
  2. Fügen Sie den folgenden Code hinzu class1:
    import System.Data.*;
    import System.Data.SqlClient.*;
    					
  3. Fügen Sie den folgenden Code hinzu Main:
    	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. Ändern Sie die Verbindungszeichenfolge entsprechend Ihrer SQL Server-Computer.
  5. Drücken Sie die Taste [F5], um das Projekt zu kompilieren und auszuführen. Beachten Sie, dass alle Spalten der SchemaTable im Konsolenfenster angezeigt. Beachten Sie außerdem, dass BaseServerName auch vor BaseCatalogName angezeigt wird.

Eigenschaften

Artikel-ID: 307512 - Geändert am: Montag, 24. Februar 2014 - Version: 1.18
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbnosurvey kbarchive kbmt kbtshoot kbvs2002sp1sweep kbbug kbpending kbreadme kbsqlclient kbsystemdata KB307512 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 307512
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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