Chyba: Tato metoda GetSchemaTable objektu SqlDataReader vrátí název nesprávném sloupci

Překlady článku Překlady článku
ID článku: 307512 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Metoda GetSchemaTable objekt SqlDataReader vrátí sloupce, BaseServerName a vlastnosti BaseCatalogName. SqlDataReader.GetSchemaTable však by měl vrátit pouze BaseCatalogName.

Příčina

Do sloupce, které jsou popsány v Microsoft .NET Framework Class Library Software Development Kit (SDK) dokumentace, SqlDataReader.GetSchemaTable vrátí sloupec s názvem BaseServerName. BaseServerName je název instance Microsoft SQL Server používá SqlDataReader. BaseServerName se zobrazí před BaseCatalogNameDataTable popisuje sloupec metadat.

Řešení

Protože tento problém nenastává u objektu OleDbDataReader, můžete získat informace SchemaTableOleDbDataReader.

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o chybu v Microsoft produktů uvedených na začátku tohoto článku.

Další informace

Kroky pro reprodukci tohoto chování

Pomocí jazyka .NET

  1. Otevřete Microsoft Visual Studio .NET a vytvořit nový projekt aplikace Visual Basic konzoly.
  2. Přidejte následující kód nad modul Module1:
    Imports System.Data.SqlClient
    					
  3. Přidejte následující kód do procedury 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. Upravit řetězec připojení jako odpovídající vaší Microsoft SQL Server.
  5. Stisknutím klávesy F5 kompilace a spuštění projektu. Všimněte si, že všechny sloupce SchemaTable se zobrazí v okně konzoly. Kromě toho si všimněte, že BaseServerName se také zobrazí před BaseCatalogName.

Pomocí Visual C# .NET

  1. Spustit Visual Studio .NET a vytvořit nové Visual C# .NET projektu aplikace konzoly.
  2. Přidejte následující kód Class1 před oboru názvů ConsoleApplication1:
    using System.Data;
    using System.Data.SqlClient;
    					
  3. Statické void postup hlavní (args řetězec []) přidejte následující kód:
    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. Upravit řetězec připojení jako odpovídající vaší SQL počítače serveru.
  5. Stisknutím klávesy F5 kompilace a spuštění projektu. Všimněte si, že všechny sloupce SchemaTable se zobrazí v okně konzoly. Kromě toho si všimněte, že BaseServerName se také zobrazí před BaseCatalogName.

Pomocí Visual C++ .NET

  1. Spustit Visual Studio .NET a Visual C++ .NET vytvořit aplikace Managed projektu.
  2. Přidejte následující kód před postup int _tmain(void):
    #using <System.dll>
    #using <System.Data.dll>
    
    using namespace System;
    using namespace System::Data;
    using namespace System::Data::SqlClient ;
    					
  3. Přidejte následující kód do procedury 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. Upravit řetězec připojení jako odpovídající vaší SQL počítače serveru.
  5. Stisknutím klávesy F5 kompilace a spuštění projektu. Všimněte si, že všechny sloupce SchemaTable se zobrazí v okně konzoly. Kromě toho si všimněte, že BaseServerName se také zobrazí před BaseCatalogName.

Pomocí Visual J# .NET

  1. Otevřete Microsoft Visual Studio .NET a vytvořit nový projekt aplikace Visual J# konzoly.
  2. Přidejte následující kód class1:
    import System.Data.*;
    import System.Data.SqlClient.*;
    					
  3. Přidejte následující kód hlavní:
    	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. Upravit řetězec připojení jako odpovídající vaší SQL počítače serveru.
  5. Stisknutím klávesy F5 kompilace a spuštění projektu. Všimněte si, že všechny sloupce SchemaTable se zobrazí v okně konzoly. Kromě toho si všimněte, že BaseServerName se také zobrazí před BaseCatalogName.

Vlastnosti

ID článku: 307512 - Poslední aktualizace: 28. února 2014 - Revize: 1.18
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbnosurvey kbarchive kbmt kbtshoot kbvs2002sp1sweep kbbug kbpending kbreadme kbsqlclient kbsystemdata KB307512 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:307512

Dejte nám zpětnou vazbu

 

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