วิธีการปรับปรุงฐานข้อมูล SQL Server โดยการใช้วัตถุ SqlDataAdapter ใน Visual Basic .NET

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 308055 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

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

สรุป

บทความนี้ประกอบด้วยตัวอย่างรหัส Microsoft Visual Basic .NET ที่แสดงให้เห็นถึงวิธีการใช้การSqlDataAdapterวัตถุการปรับปรุงฐานข้อมูล SQL Server ด้วยการปรับเปลี่ยนข้อมูลที่ทำงานบนตัวชุดข้อมูลวัตถุที่มีการเติมข้อมูลให้กับข้อมูลจากตารางในฐานข้อมูล

ความต้องการ

รายการต่อไปนี้แสดงฮาร์ดแวร์ที่แนะนำ ซอฟต์แวร์ โครงสร้างพื้นฐานของเครือข่าย ทักษะ และทราบ และเซอร์วิสแพ็คที่จำเป็นต้องใช้:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 ขั้นสูงเซิร์ฟเวอร์ หรือเซิร์ฟเวอร์ Windows NT 4.0
  • Microsoft Visual Studio .NET
  • Microsoft SQL Server รุ่น 7.0 หรือรุ่นใหม่กว่า
บทความนี้อนุมานว่า คุณไม่คุ้นเคยกับหัวข้อต่อไปนี้:
  • visual Basic .NET
  • ข้อมูลพื้นฐานของเดสก์ท็อป ADO.NET และไวยากรณ์

คำอธิบายเกี่ยวกับเทคนิค

กระบวนการSqlDataAdapterวัตถุที่ทำหน้าที่เป็นบริดจ์ระหว่างการ ADO.NETชุดข้อมูลวัตถุและฐานข้อมูล SQL ServerSqlDataAdapterมีวัตถุที่ populates ADO.NET เป็นสื่อกลางชุดข้อมูลวัตถุที่ มีข้อมูลที่ดึงมาจากฐานข้อมูล SQL Server และฐานข้อมูลเพื่อให้สะท้อนถึงการเปลี่ยนแปลง (เช่นแทรก ปรับปรุง และลบ) ที่เกิดขึ้นกับข้อมูล โดยใช้การปรับปรุงแล้ว นั้นชุดข้อมูลวัตถุ

กระบวนการInsertCommandกระบวนการUpdateCommandและDeleteCommandคุณสมบัติของSqlDataAdapterวัตถุที่ปรับปรุงฐานข้อมูล ด้วยการปรับเปลี่ยนข้อมูลที่เรียกใช้บนตัวชุดข้อมูลวัตถุ คุณสมบัติเหล่านี้ได้SqlCommandวัตถุที่ระบุ INSERT, UPDATE และคำสั่ง DELETE Transact-SQL ที่ใช้ในการลงรายการบัญชีการปรับเปลี่ยนชุดข้อมูลในฐานข้อมูลเป้าหมาย กระบวนการSqlCommandวัตถุที่ได้รับการกำหนดคุณสมบัติเหล่านี้สามารถถูกสร้างขึ้นด้วยตนเองในรหัส หรือสร้างขึ้นโดยอัตโนมัติ โดยใช้การSqlCommandBuilderวัตถุ

ตัวอย่างรหัสแรกในบทความนี้อธิบายวิธีใช้นี้SqlCommandBuilderวัตถุที่สร้างโดยอัตโนมัติUpdateCommandคุณสมบัตินี้SqlDataAdapterวัตถุ ตัวอย่างที่สองใช้ในสถานการณ์ที่คุณไม่สามารถใช้การสร้างคำสั่งโดยอัตโนมัติ วิธีการสร้างด้วยตนเอง และใช้แสดงตัวอย่างสองตัวSqlCommandวัตถุเป็นแบบUpdateCommandคุณสมบัติของคำSqlDataAdapterวัตถุ

สร้างตารางเซิร์ฟเวอร์ SQL ตัวอย่าง

เมื่อต้องการสร้างตาราง SQL Server ตัวอย่างที่คุณสามารถใช้ในตัวอย่างโค้ด Visual Basic .NET ที่ได้รับการบันทึกไว้ในบทความนี้ ดำเนินการดังต่อไปนี้:
  1. เปิดตัววิเคราะห์คำถาม SQL และการเชื่อมต่อกับฐานข้อมูลที่คุณต้องการสร้างตารางตัวอย่าง ตัวอย่างรหัสในนี้การใช้บทความนี้northwindฐานข้อมูลที่มาพร้อมกับ SQL Server
  2. เมื่อต้อง การสร้างตารางตัวอย่างที่ชื่อ CustTest และแทรกเรกคอร์ดในตาราง เรียกใช้คำสั่ง Transact SQL ต่อไปนี้:
    Create Table CustTest
    (
     CustID int primary key,
     CustName varchar(20)
    )
    
    Insert into CustTest values(1,'John')
    					

ตัวอย่างรหัส 1: คำสั่งที่สร้างโดยอัตโนมัติ

ถ้าคำสั่ง SELECT ที่คุณใช้ในการดึงข้อมูลที่ populates เป็นชุดข้อมูลใช้ในตารางฐานข้อมูลเดียว คุณสามารถใช้การCommandBuilderวัตถุที่สร้างโดยอัตโนมัติDeleteCommandกระบวนการInsertCommandและUpdateCommandคุณสมบัติของDataAdapter. simplifies และลดรหัสที่จำเป็นต้องใช้เพื่อทำการดำเนินงาน INSERT, UDPATE และลบ

เป็นความต้องการต่ำสุด คุณต้องตั้งค่านี้SelectCommandคุณสมบัติเพื่อสร้างคำสั่งโดยอัตโนมัติ schema ของตารางที่จะSelectCommandดึงกำหนดไวยากรณ์ของ INSERT, UPDATE และการลบรายการที่ถูกสร้างขึ้นโดยอัตโนมัติ

กระบวนการSelectCommandต้องยังกลับคีย์หลักอย่างน้อยหนึ่งหรือคอลัมน์ที่ไม่ซ้ำกัน ถ้าไม่มีอยู่ มีสร้างข้อยกเว้น InvalidOperation และจะไม่มีสร้างคำสั่ง

เมื่อต้องการสร้างโปรแกรมประยุกต์คอนโซล Visual Basic .NET ตัวอย่างที่แสดงวิธีใช้นี้SqlCommandBuilderวัตถุที่สร้างโดยอัตโนมัติDeleteCommandกระบวนการInsertCommandและUpdateCommandคุณสมบัติของSqlCommandวัตถุสำหรับคำSqlDataAdapterวัตถุ ทำตามขั้นตอนเหล่านี้:
  1. เมื่อต้องการสร้างโปรแกรมประยุกต์ Visual Basic .NET คอนโซลใหม่ ดำเนินการดังต่อไปนี้:
    1. เริ่ม Microsoft Visual Studio .NET
    2. ในการแฟ้ม:เมนู ให้ชี้ไปที่ใหม่แล้ว คลิกProject.
    3. คลิกโครงการ visual Basicภายใต้ชนิดโครงการแล้ว คลิกแอพลิเคชันของคอนโซลภายใต้แม่แบบ.
  2. แทนเนื้อหาเริ่มต้นของ Module1 กับรหัสต่อไปนี้:
    Imports System.Data.SqlClient
    Imports Console = System.Console
    
    Module Module1
    
        Sub Main()
    
            Dim cn As New SqlConnection()
            Dim CustomersDataSet As New DataSet()
            Dim da As SqlDataAdapter
            Dim dr As DataRow
            Dim cmdBuilder As SqlCommandBuilder  
      
            'Set the connection string of the SqlConnection object to connect to the
            'SQL Server database in which you created the sample table.
    
            cn.ConnectionString = "Server=.;Database=northwind;UID=sa;PWD=;"
            cn.Open()      
    
            
            'Initialize the SqlDataAdapter object by specifying a Select command 
            'that retrieves data from the sample table.
    
            da = New SqlDataAdapter("select * from CustTest order by CustId", cn)
    
    
            'Initialize the SqlCommandBuilder object to automatically generate and initialize
            'the UpdateCommand, InsertCommand and DeleteCommand properties of the SqlDataAdapter.
    
            cmdBuilder = New SqlCommandBuilder(da)
    
            'Populate the dataset by running the Fill method of the SqlDataAdapter.
            da.Fill(CustomersDataSet, "Customers")
    
           
            'Display the Update, Insert and Delete commands that were automatically generated
            'by the SqlCommandBuilder object. 
    
            Console.WriteLine("Update command Generated by the Command Builder : ")
            Console.WriteLine("==================================================")
            Console.WriteLine(cmdBuilder.GetUpdateCommand.CommandText)
            Console.WriteLine("         ")
    
            Console.WriteLine("Insert command Generated by the Command Builder : ")
            Console.WriteLine("==================================================")
            Console.WriteLine(cmdBuilder.GetInsertCommand.CommandText)
            Console.WriteLine("         ")        
    
            Console.WriteLine("Delete command Generated by the Command Builder : ")
            Console.WriteLine("==================================================")
            Console.WriteLine(cmdBuilder.GetDeleteCommand.CommandText)
            Console.WriteLine("         ")
    
            'Write out the value in the CustName field before updating the data using the DataSet.
            Console.WriteLine("Customer Name before Update : " & CustomersDataSet.Tables("Customers").Rows(0)("CustName"))
    
            'Modify the value of the CustName field.
            CustomersDataSet.Tables("Customers").Rows(0)("CustName") = "Jack"
    
            'Post the data modification to the database.
            da.Update(CustomersDataSet, "Customers")        
    
            Console.WriteLine("Customer Name updated successfully")
    
            'Close the database connection.
            cn.Close()
    
            Console.ReadLine()
    
        End Sub
    
    End Module
  3. บันทึก และเรียกใช้โปรแกรมประยุกต์ หน้าต่างคอนโซลเปิดขึ้น และแสดงผลลัพธ์ต่อไปนี้:
    Update command Generated by the Command Builder : 
    ==================================================
    UPDATE CustTest SET CustID = @p1 , CustName = @p2 WHERE ( CustID = @p3 AND CustName = @p4 )
             
    Insert command Generated by the Command Builder : 
    ==================================================
    INSERT INTO CustTest( CustID , CustName ) VALUES ( @p1 , @p2 )
             
    Delete command Generated by the Command Builder : 
    ==================================================
    DELETE FROM  CustTest WHERE ( CustID = @p1 AND CustName = @p2 )   
          
    Customer Name before Update : John
    Customer Name updated successfully
    						
  4. กดแป้นใด ๆ เพื่อหน้าต่างคอนโซลที่ยกเลิก และหยุดการแอพลิเคชัน

ตัวอย่างรหัส 2: สร้างด้วยตนเอง และการเตรียมใช้งานคุณสมบัติ UpdateCommand

ผลลัพธ์ที่สร้างรหัสตัวอย่าง 1 บ่งชี้ว่า ตรรกะเพื่อสร้างคำสั่งโดยอัตโนมัติสำหรับใบแจ้งยอด UPDATE จะขึ้นอยู่กับการเกิดพร้อมกัน optimistic นั่นคือ เร็กคอร์ดที่ไม่ได้ถูกล็อกเพื่อแก้ไข และผู้ใช้อื่นหรือกระบวนสามารถแก้ไขเร็กคอร์ดทุกครั้งที่

เนื่องจากระเบียนสามารถถูกปรับเปลี่ยนหลังจากที่มีการส่งคืนจากคำสั่ง SELECT แต่ก่อน UPDATE ใน การออกใบแจ้งยอด งบ UPDATE ที่ถูกสร้างขึ้นโดยอัตโนมัติประกอบด้วยอนุประโยคเพื่อให้แถวถูกปรับปรุงเฉพาะเมื่อประกอบด้วยค่าเริ่มต้นทั้งหมด นี่คือการหลีกเลี่ยงการเขียนทับข้อมูลใหม่ ถ้าเป็นคำสั่ง UPDATE ที่ถูกสร้างขึ้นโดยอัตโนมัติพยายามแถวที่ถูกลบไปแล้ว หรือไม่ประกอบด้วยค่าเดิมที่พบใน การปรับปรุงนี้ชุดข้อมูลคำสั่งไม่มีผลกับเร็กคอร์ดใด ๆ และมีสร้างข้อยกเว้นของ DBConcurrencyException เมื่อต้องการทดสอบนี้ มีรหัสใน 1 ในตัวอย่างรหัส การเรียกใช้รหัสในการดีบักใน Visual Studio เกอร์ เบรกพอยต์แบบหลังจากการตั้งค่านี้ชุดข้อมูลมีการกรอกข้อมูลแต่ ก่อนที่ถูกปรับปรุง ฐานข้อมูล และลบแถวหนึ่งในตารางจากตัววิเคราะห์คำถาม SQL กระบวนการการปรับปรุงเรียกแล้ว throws ข้อยกเว้น

ถ้าคุณต้องการคำสั่ง UPDATE ให้เสร็จสมบูรณ์คำนึงถึงค่าเดิมได้ คุณต้องเปิดเซ็ตUpdateCommandสำหรับการDataAdapterและไม่มีปัญหาในการสร้างคำสั่งโดยอัตโนมัติ

เมื่อต้องการสร้าง และกำหนดค่าเริ่มต้นด้วยตนเองUpdateCommandคุณสมบัตินี้SqlDataAdapterวัตถุที่ใช้ใน 1 ตัวอย่างรหัส ทำตามขั้นตอนเหล่านี้:
  1. รหัสที่มีอยู่ในย่อยหลักของ Module1 ในคอนโซล Visual Basic .NET โปรแกรมประยุกต์ที่คุณสร้างขึ้นในการแทนตัวอย่างรหัส 1: คำสั่งที่สร้างโดยอัตโนมัติส่วนที่ มีรหัสต่อไปนี้:
    Dim cn As New SqlConnection()
    Dim CustomersDataSet As New DataSet()
    Dim da As SqlDataAdapter
    Dim dr As DataRow        
    Dim DAUpdateCmd As SqlCommand
    
    
    cn.ConnectionString = "Server=.;Database=northwind;UID=sa;PWD=;"
    cn.Open()
    
    da = New SqlDataAdapter("select * from CustTest order by CustId", cn)
    
    'Initialize the SqlCommand object that will be used as the DataAdapter's UpdateCommand.
    'Note that the WHERE clause uses only the CustId field to locate the record that is to be updated.
    
    DAUpdateCmd = New SqlCommand("Update CustTest set CustName = @pCustName where CustId = @pCustId", da.SelectCommand.Connection)
    
    
    'Create and append the parameters for the Update command.
    
    DAUpdateCmd.Parameters.Add(New SqlParameter("@pCustName", SqlDbType.VarChar))
    DAUpdateCmd.Parameters("@pCustName").SourceVersion = DataRowVersion.Current
    DAUpdateCmd.Parameters("@pCustName").SourceColumn = "CustName"
    
    DAUpdateCmd.Parameters.Add(New SqlParameter("@pCustId", SqlDbType.Int))
    DAUpdateCmd.Parameters("@pCustId").SourceVersion = DataRowVersion.Original
    DAUpdateCmd.Parameters("@pCustId").SourceColumn = "CustId"
    
    
    'Assign the SqlCommand to the UpdateCommand property of the SqlDataAdapter.
    da.UpdateCommand = DAUpdateCmd        
    
    da.Fill(CustomersDataSet, "Customers")        
    
    Console.WriteLine("Customer Name before Update : " & CustomersDataSet.Tables("Customers").Rows(0)("CustName"))
    
    CustomersDataSet.Tables("Customers").Rows(0)("CustName") = "Jack"
    da.Update(CustomersDataSet, "Customers")        
    
    Console.WriteLine("Customer Name updated successfully")
    
    cn.Close()
    Console.ReadLine()
    
    					
  2. ทำซ้ำขั้นตอนที่ 1 ถึง 4 ในนั้นตัวอย่างรหัส 1: คำสั่งที่สร้างโดยอัตโนมัติส่วน โปรดสังเกตว่า ข้อยกเว้นของ DBConcurrencyException ไม่สร้าง

คุณสมบัติ

หมายเลขบทความ (Article ID): 308055 - รีวิวครั้งสุดท้าย: 19 ตุลาคม 2553 - Revision: 2.0
ใช้กับ
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Keywords: 
kbhowtomaster kbsqlclient kbsystemdata kbmt KB308055 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:308055

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

 

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