LỖI: Các phương pháp GetSchemaTable của đối tượng SqlDataReader trả về sai cột tên

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:307512
Bài viết này đã được lưu trữ. Bài viết được cung cấp "nguyên trạng" và sẽ không còn được cập nhật nữa.
TRIỆU CHỨNG
Các GetSchemaTable phương pháp của các SqlDataReader đối tượng trả về cột, các BaseServerNameBaseCatalogName bất động sản. Tuy nhiên,SqlDataReader.GetSchemaTable chỉ cần trả lại BaseCatalogName.
NGUYÊN NHÂN
Thêm vào các cột được mô tả trong các Microsoft.NET Framework lớp thư viện bộ phát triển phần mềm (SDK) tài liệu hướng dẫn, SqlDataReader.GetSchemaTable trả về một cột tên BaseServerName. BaseServerName là tên của Microsoft SQL Server ví dụ mà SqlDataReader sử dụng. BaseServerName xuất hiện trước khi BaseCatalogName trong các DataTable mô tả các siêu dữ liệu cột.
GIẢI PHÁP
Bởi vì vấn đề này không xảy ra với các OleDbDataReader đối tượng, bạn có thể sử dụng OleDbDataReader để có được các SchemaTable thông tin.
TÌNH TRẠNG
Microsoft đã xác nhận rằng đây là một lỗi trong Microsoft sản phẩm được liệt kê ở đầu bài viết này.
THÔNG TIN THÊM

Các bước để tạo lại hành vi

Bằng cách sử dụng Visual Basic.NET

  1. Microsoft Visual Studio mở.NET, và tạo ra một thị giác mới Cơ bản ứng dụng giao diện điều khiển dự án.
  2. Thêm mã sau đây trên mô-đun Module1:
    Imports System.Data.SqlClient					
  3. Thêm mã sau vào thủ tục 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. Sửa đổi các chuỗi kết nối như là thích hợp cho bạn Microsoft SQL Server.
  5. Bấm phím F5 để biên dịch và chạy các dự án. Thông báo mà tất cả các cột của các SchemaTable xuất hiện trong cửa sổ giao diện điều khiển. Ngoài ra, nhận thấy rằng BaseServerName cũng xuất hiện trước khi BaseCatalogName.

Sử dụng Visual C#.NET

  1. Bắt đầu Visual Studio.NET, và tạo ra một mới Visual C#.NET Dự án ứng dụng giao diện điều khiển.
  2. Thêm mã sau vào Class1 trước khi các ConsoleApplication1 không gian tên:
    using System.Data;using System.Data.SqlClient;					
  3. Thêm mã sau vào static void Main (string] thủ tục args):
    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. Sửa đổi các chuỗi kết nối như là thích hợp cho SQL của bạn Máy tính phục vụ.
  5. Bấm phím F5 để biên dịch và chạy các dự án. Thông báo mà tất cả các cột của các SchemaTable xuất hiện trong cửa sổ giao diện điều khiển. Ngoài ra, nhận thấy rằng BaseServerName cũng xuất hiện trước khi BaseCatalogName.

Bằng cách sử dụng Visual c + +.NET

  1. Bắt đầu Visual Studio.NET, và tạo ra một Visual C++.NET Quản lý dự án ứng dụng.
  2. Thêm mã sau đây trước khi int _tmain(void) thủ tục:
    #using <System.dll>#using <System.Data.dll>using namespace System;using namespace System::Data;using namespace System::Data::SqlClient ;					
  3. Thêm mã sau vào thủ tục-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. Sửa đổi các chuỗi kết nối như là thích hợp cho SQL của bạn Máy tính phục vụ.
  5. Bấm phím F5 để biên dịch và chạy các dự án. Thông báo mà tất cả các cột của các SchemaTable xuất hiện trong cửa sổ giao diện điều khiển. Ngoài ra, nhận thấy rằng BaseServerName cũng xuất hiện trước khi BaseCatalogName.

Sử dụng Visual J#.NET

  1. Microsoft Visual Studio mở.NET, và tạo ra một thị giác mới J# giao diện điều khiển ứng dụng dự án.
  2. Thêm mã sau đây để class1:
    import System.Data.*;import System.Data.SqlClient.*;					
  3. Thêm mã sau vào chính:
    	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. Sửa đổi các chuỗi kết nối như là thích hợp cho SQL của bạn Máy tính phục vụ.
  5. Bấm phím F5 để biên dịch và chạy các dự án. Thông báo mà tất cả các cột của các SchemaTable xuất hiện trong cửa sổ giao diện điều khiển. Ngoài ra, nhận thấy rằng BaseServerName cũng xuất hiện trước khi BaseCatalogName.
kbreadme

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 307512 - Xem lại Lần cuối: 02/21/2014 00:43:36 - Bản sửa đổi: 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 KbMtvi
Phản hồi