BUG: Metode GetSchemaTable objek SqlDataReader mengembalikan nama kolom salah

PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.

307512
Artikel ini telah diarsipkan. Artikel ditawarkan dalam bentuk "apa adanya" dan tidak akan dapat diperbarui lagi.
GEJALA
The GetSchemaTable metode SqlDataReader objek kembali kolom, BaseServerName dan BaseCatalogName properti. Namun,SqlDataReader.GetSchemaTable hanya harus kembali BaseCatalogName.
PENYEBAB
Selain untuk kolom yang dijelaskan di Microsoft.NET Framework kelas perpustakaan Software Development Kit (SDK) dokumentasi, SqlDataReader.GetSchemaTable kembali kolom yang bernama BaseServerName. BaseServerName adalah nama Microsoft SQL Server contoh yang SqlDataReader menggunakan. BaseServerName muncul sebelum BaseCatalogName dalam DataTable yang menggambarkan metadata kolom.
PEMECAHAN MASALAH
Karena masalah ini tidak terjadi dengan OleDbDataReader objek, Anda dapat menggunakan OleDbDataReader untuk mendapatkan SchemaTable informasi.
STATUS
Microsoft telah mengkonfirmasi bahwa ini adalah bug di Microsoft produk yang didaftar pada awal artikel ini.
INFORMASI LEBIH LANJUT

Langkah-Langkah untuk Mereproduksi Perilaku

Menggunakan Visual Basic.NET

  1. Buka Microsoft Visual Studio.NET, dan menciptakan Visual baru Dasar proyek Console Application.
  2. Menambahkan kode berikut di atas modul Module1:
    Imports System.Data.SqlClient					
  3. Tambahkan kode berikut untuk prosedur 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. Memodifikasi rangkaian sambungan yang sesuai untuk Anda Microsoft SQL Server.
  5. Tekan tombol F5 untuk mengkompilasi dan menjalankan proyek. Pemberitahuan itu semua kolom SchemaTable muncul di jendela konsol. Selain itu, perhatikan bahwa BaseServerName juga muncul sebelum BaseCatalogName.

Menggunakan Visual C#.NET

  1. Mulai Visual Studio.NET, dan membuat baru Visual C#.NET Konsol aplikasi proyek.
  2. Tambahkan kode berikut untuk Class1 sebelum ConsoleApplication1 namespace:
    using System.Data;using System.Data.SqlClient;					
  3. Tambahkan kode berikut untuk static void Main (string] args) prosedur:
    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. Memodifikasi rangkaian sambungan yang sesuai untuk Anda SQL Komputer server.
  5. Tekan tombol F5 untuk mengkompilasi dan menjalankan proyek. Pemberitahuan itu semua kolom SchemaTable muncul di jendela konsol. Selain itu, perhatikan bahwa BaseServerName juga muncul sebelum BaseCatalogName.

Menggunakan Visual C++.NET

  1. Mulai Visual Studio.NET, dan menciptakan Visual C++.NET Dikelola aplikasi proyek.
  2. Tambahkan kode berikut sebelum int _tmain(void) prosedur:
    #using <System.dll>#using <System.Data.dll>using namespace System;using namespace System::Data;using namespace System::Data::SqlClient ;					
  3. Tambahkan kode berikut ke int-tmain(void) prosedur:
    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. Memodifikasi rangkaian sambungan yang sesuai untuk Anda SQL Komputer server.
  5. Tekan tombol F5 untuk mengkompilasi dan menjalankan proyek. Pemberitahuan itu semua kolom SchemaTable muncul di jendela konsol. Selain itu, perhatikan bahwa BaseServerName juga muncul sebelum BaseCatalogName.

Menggunakan Visual J#.NET

  1. Buka Microsoft Visual Studio.NET, dan menciptakan Visual baru J# konsol aplikasi proyek.
  2. Tambahkan kode berikut untuk class1:
    import System.Data.*;import System.Data.SqlClient.*;					
  3. Tambahkan kode berikut ke utama:
    	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. Memodifikasi rangkaian sambungan yang sesuai untuk Anda SQL Komputer server.
  5. Tekan tombol F5 untuk mengkompilasi dan menjalankan proyek. Pemberitahuan itu semua kolom SchemaTable muncul di jendela konsol. Selain itu, perhatikan bahwa BaseServerName juga muncul sebelum BaseCatalogName.
kbreadme

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 307512 - Tinjauan Terakhir: 02/24/2014 20:22:56 - Revisi: 2.0

  • Microsoft ADO.NET 2.0
  • 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 kbtshoot kbvs2002sp1sweep kbbug kbpending kbreadme kbsqlclient kbsystemdata kbmt KB307512 KbMtid
Tanggapan