BUG: ส่งกลับวิธีการ GetSchemaTable ของวัตถุ SqlDataReader ค่าชื่อคอลัมน์ไม่ถูกต้อง

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 307512 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
บทความนี้ถูกเก็บถาวรแล้วเนื้อหาของบทความจึงถูกนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

กระบวนการGetSchemaTableวิธีการนี้SqlDataReaderคอลัมน์ การส่งกลับค่าวัตถุBaseServerNameและBaseCatalogNameคุณสมบัติ อย่างไรก็ตามSqlDataReader.GetSchemaTableควรกลับเท่านั้นBaseCatalogName.

สาเหตุ

นอกเหนือจากการคอลัมน์ที่อธิบายไว้ใน Microsoft .NET Framework คลาไลบรารีซอฟต์แวร์พัฒนา Kit (SDK) เอกสารSqlDataReader.GetSchemaTableส่งกลับค่าชื่อคอลัมน์BaseServerName.BaseServerNameมีชื่อของ Microsoft SQL Server กรณีที่SqlDataReaderใช้BaseServerNameปรากฏขึ้นก่อนBaseCatalogNameในการDataTableซึ่งอธิบายข้อมูลเมตาของคอลัมน์

การแก้ไข

เนื่องจากปัญหานี้ไม่ได้เกิดขึ้นกับการOleDbDataReaderวัตถุ คุณสามารถใช้ได้OleDbDataReaderการขอรับการSchemaTableข้อมูล

สถานะ

Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วนเริ่มต้นของเอกสารนี้

ข้อมูลเพิ่มเติม

ขั้นตอนในการทำให้สถานการณ์เกิดขึ้นอีกครั้ง

การใช้ Visual Basic .NET

  1. เปิด Microsoft Visual Studio .NET และสร้างโครงการใหม่ของแอพลิเคชันคอนโซลของ Visual Basic
  2. เพิ่มรหัสต่อไปนี้อยู่เหนือ Module1 โมดูล:
    Imports System.Data.SqlClient
    					
  3. เพิ่มรหัสต่อไปนี้เพื่อดำเนินการย่อย 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. แก้ไขสายอักขระการเชื่อมต่อตามความเหมาะสมสำหรับ Microsoft SQL Server ของคุณ
  5. กดแป้น F5 เพื่อคอมไพล์ และเรียกใช้โครงการ สังเกตว่า คอลัมน์ของทั้งหมดSchemaTableปรากฏในหน้าต่างคอนโซล นอกจากนี้ สังเกตว่าBaseServerNameนอกจากนี้ยัง ปรากฏก่อนBaseCatalogName.

การใช้ Visual .NET c#

  1. เริ่มการทำงานของ Visual Studio .NET และสร้างแบบใหม่ Visual c# .NET แอพลิเคชันคอนโซลโครงการ
  2. เพิ่มรหัสต่อไปนี้เพื่อ Class1 ก่อนConsoleApplication1namespace:
    using System.Data;
    using System.Data.SqlClient;
    					
  3. เพิ่มรหัสต่อไปนี้กับขั้นตอนการหลัก (สตริงที่[]อาร์กิวเมนต์) โมฆะแบบคงที่:
    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. แก้ไขสายอักขระการเชื่อมต่อตามความเหมาะสมของ SQL Server คอมพิวเตอร์
  5. กดแป้น F5 เพื่อคอมไพล์ และเรียกใช้โครงการ สังเกตว่า คอลัมน์ของทั้งหมดSchemaTableปรากฏในหน้าต่างคอนโซล นอกจากนี้ สังเกตว่าBaseServerNameนอกจากนี้ยัง ปรากฏก่อนBaseCatalogName.

การใช้ Visual c ++.NET

  1. เริ่มการทำงานของ Visual Studio .NET และสร้าง Visual c ++.NET แอพลิเคชันจัดการโครงการ
  2. เพิ่มรหัสต่อไปนี้ก่อนที่จะดำเนินการ _tmain(void) int:
    #using <System.dll>
    #using <System.Data.dll>
    
    using namespace System;
    using namespace System::Data;
    using namespace System::Data::SqlClient ;
    					
  3. เพิ่มรหัสต่อไปนี้กับขั้นตอน-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. แก้ไขสายอักขระการเชื่อมต่อตามความเหมาะสมของ SQL Server คอมพิวเตอร์
  5. กดแป้น F5 เพื่อคอมไพล์ และเรียกใช้โครงการ สังเกตว่า คอลัมน์ของทั้งหมดSchemaTableปรากฏในหน้าต่างคอนโซล นอกจากนี้ สังเกตว่าBaseServerNameนอกจากนี้ยัง ปรากฏก่อนBaseCatalogName.

การใช้ Visual .NET j#

  1. เปิด Microsoft Visual Studio .NET และสร้างโครงการใหม่ของแอพลิเคชันการแสดงผลคอนโซล j#
  2. เพิ่มรหัสต่อไปนี้เพื่อ class1:
    import System.Data.*;
    import System.Data.SqlClient.*;
    					
  3. เพิ่มรหัสต่อไปนี้เพื่อหลัก:
    	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. แก้ไขสายอักขระการเชื่อมต่อตามความเหมาะสมของ SQL Server คอมพิวเตอร์
  5. กดแป้น F5 เพื่อคอมไพล์ และเรียกใช้โครงการ สังเกตว่า คอลัมน์ของทั้งหมดSchemaTableปรากฏในหน้าต่างคอนโซล นอกจากนี้ สังเกตว่าBaseServerNameนอกจากนี้ยัง ปรากฏก่อนBaseCatalogName.

คุณสมบัติ

หมายเลขบทความ (Article ID): 307512 - รีวิวครั้งสุดท้าย: 24 กุมภาพันธ์ 2557 - Revision: 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++ 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 kbtshoot kbvs2002sp1sweep kbbug kbpending kbreadme kbsqlclient kbsystemdata kbmt KB307512 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:307512

ให้ข้อเสนอแนะ

 

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