วิธีการใช้ ADO.NET การเรียกข้อ และปรับเปลี่ยนระเบียนในสมุดงาน Excel ที่มีการ Visual Basic .NET

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

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

สรุป

บทความนี้อธิบายวิธีการที่คุณสามารถใช้ ADO.NET เพื่อดึงข้อมูลจากสมุดงาน Microsoft Excel ปรับเปลี่ยนข้อมูลในสมุดงานที่อยู่ หรือเพิ่มข้อมูลไปยังสมุดงานใหม่ การเข้าถึงสมุดงาน Excel ที่ มี ADO.NET คุณสามารถใช้ตัวให้บริการ Jet OLE DB บทความนี้ให้ข้อมูลที่คุณต้องการเพื่อให้คุณสามารถใช้ตัวให้บริการ Jet OLE DB เมื่อ Excel เป็นแหล่งข้อมูลเป้าหมาย

วิธีการใช้ตัวให้บริการฐานข้อมูล OLE Jet ด้วยสมุดงาน Microsoft Excel

โปรแกรมฐานข้อมูลของ Microsoft Jet สามารถเข้าถึงข้อมูลในรูปฐานข้อมูลแบบแฟ้มอื่น ๆ เช่นสมุดงาน Excel ผ่านไดรเวอร์ดัชนีโดยลำดับการเข้าถึงวิธี (ISAM) ที่สามารถติดตั้งได้ เมื่อต้องการเปิดรูปแบบภายนอกที่ได้รับการสนับสนุน โดยผู้ที่ Microsoft Jet 4.0 OLE DB ให้ ระบุชนิดของฐานข้อมูลในคุณสมบัติเพิ่มเติมสำหรับการเชื่อมต่อ ผู้ที่ Jet OLE DB ให้สนับสนุนชนิดของฐานข้อมูลต่อไปนี้สำหรับสมุดงาน Excel ของ Microsoft:
Excel 3.0
Excel 4.0
Excel 5.0
Excel 8.0
หมายเหตุ:: ใช้ Excel 5.0 แหล่งฐานข้อมูลชนิดของสมุดงาน Microsoft Excel 5.0 และ 7.0 (95) และใช้ฐานข้อมูลชนิดของแหล่งที่มา Excel 8.0 สำหรับ 8.0 Excel Microsoft (97), 9.0 (2000) และ 10.0 สมุดงาน (2002) ตัวอย่างในบทความนี้ใช้สมุดงาน Excel ในรูปแบบ Excel 2000 และ Excel 2002

สายอักขระการเชื่อมต่อ

เมื่อต้องการเข้าถึงสมุดงาน Excel โดยใช้ผู้ที่ Jet OLE DB ให้ ใช้สายอักขระเชื่อมต่อที่มีไวยากรณ์ต่อไปนี้:
คุณสมบัติ Source=C:\Book1.xls;Extended Provider=Microsoft.Jet.OLEDB.4.0;Data = " Excel 8.0; HDR =ใช่; "
สายอักขระการเชื่อมต่อ ระบุเส้นทางและชื่อเต็มสำหรับสมุดงานในการแหล่งข้อมูลพารามิเตอร์ กระบวนการคุณสมบัติเพิ่มเติมพารามิเตอร์อาจประกอบด้วยคุณสมบัติที่สอง: คุณสมบัติสำหรับ ISAM แบบรุ่นและคุณสมบัติเพื่อระบุตารางมีส่วนหัวหรือไม่ ได้

กับสมุดงาน Excel แถวแรกในช่วงมีแถวส่วนหัว (หรือชื่อเขต) โดยค่าเริ่มต้น ถ้าไม่ประกอบด้วยส่วนหัวช่วงแรก คุณสามารถระบุ HDR = NO ในคุณสมบัติเพิ่มเติมในสายอักขระการเชื่อมต่อของคุณได้ ถ้าคุณระบุ HDR = NO ในสายอักขระเชื่อมต่อ ผู้ให้บริการ Jet OLE DB อัตโนมัติชื่อเขตข้อมูลที่คุณ (F1 แสดงถึงฟิลด์แรก F2 แทนฟิลด์ที่สอง และอื่น ๆ)

ชนิดของข้อมูล

ซึ่งแตกต่างจากฐานข้อมูลดั้งเดิม ไม่มีโดยตรงวิธีเพื่อระบุชนิดของข้อมูลสำหรับคอลัมน์ในตาราง Excel แทน ที่ตัวให้บริการ OLE DB สแกนแปดแถวในคอลัมน์เพื่อguessพิมพ์ข้อมูลสำหรับฟิลด์ คุณสามารถเปลี่ยนจำนวนของแถวเพื่อสแกน โดยการระบุค่าที่อยู่ระหว่างหนึ่ง (1) และ sixteen (16) สำหรับ MAXSCANROWS การตั้งค่าในคุณสมบัติเพิ่มเติมของสายอักขระการเชื่อมต่อของคุณได้

แบบแผนการตารางตั้งชื่อคิด

มีหลายวิธีที่คุณสามารถอ้างอิงตาราง (หรือช่วง) ในสมุดงาน Excel:
  • ใช้ชื่อแผ่นงานตาม ด้วยเครื่องหมายดอลลาร์ (ตัวอย่าง, [Sheet1 $] หรือ [$แผ่นงานของฉัน]) ตารางสมุดงานที่มีการอ้างอิงในลักษณะนี้รวมทั้งใช้ช่วงของแผ่นงาน
    เลือก * จาก [Sheet1 $]
  • ใช้ช่วงที่ มีชื่อที่กำหนด (ตัวอย่าง, [MyNamedRange):
    เลือก * จาก [MyNamedRange]
  • ใช้ช่วงที่ มีที่อยู่ที่ระบุ (ตัวอย่างเช่น, [Sheet1 $ A1: B10]):
    เลือก * จาก [Sheet1 $ A1: B10]
หมายเหตุ:: เครื่องหมายดอลลาร์ชื่อแผ่นงานการต่อไปนี้เป็นการบ่งชี้ว่า ตารางที่มีอยู่ ถ้าคุณกำลังสร้างตารางใหม่ ตามที่กล่าวถึงในการสร้างสมุดงานใหม่และตารางส่วนของบทความนี้ กรุณาอย่าใช้เครื่องหมายดอลลาร์

วิธีการใช้สมุดงาน Excel ที่ใช้เป็นแหล่งข้อมูล ADO.NET

เรียกดูระเบียน

คุณสามารถเรียกระเบียนจากฐานข้อมูล โดยใช้ approaches สองอย่างใดอย่างหนึ่งใน ADO.NET: มีการชุดข้อมูลหรือยังDataReader.

aชุดข้อมูลแคของเรกคอร์ดที่ดึงมาจากแหล่งข้อมูลได้ ข้อมูลในนั้นชุดข้อมูลโดยปกติแล้วจะลด much รุ่นใดอยู่ในฐานข้อมูล อย่างไรก็ตาม คุณสามารถทำงานกับแฟ้มนั้นในลักษณะเดียวกับที่คุณทำงานกับข้อมูลที่แท้จริง และยังคงอยู่ต่อจากฐานข้อมูลที่แท้จริง นอกเหนือจากการเรียกข้อมูล คุณสามารถใช้เป็นชุดข้อมูลเมื่อต้องการทำการดำเนินการปรับปรุงในฐานข้อมูลที่ขีดเส้นใต้

อีกวิธีหนึ่งคือ คุณสามารถใช้เป็นDataReaderการเรียกกระแสข้อมูลเพียงอ่าน -เพียงอย่างเดียว ไปข้างหน้า - ข้อมูลจากฐานข้อมูล เมื่อคุณใช้การDataReaderเพิ่มประสิทธิภาพการทำงานของโปรแกรม และค่าผลิตที่ระบบจะลดลงเนื่องจากแถวเพียงหนึ่งครั้งเคยอยู่ในหน่วยความจำ ถ้าคุณมีปริมาณที่มีขนาดใหญ่ของข้อมูลที่จะเรียกคืน และคุณไม่ต้องการเปลี่ยนแปลงฐานข้อมูลที่อยู่ภายใต้ ตัวDataReaderทางเลือกที่ดีกว่าการชุดข้อมูล.

เพิ่ม และการปรับปรุงระเบียน

ด้วย ADO.NET คุณสามารถแทรก และการปรับปรุงระเบียนในสมุดงานในหนึ่งในสามวิธี:
  • เรียกใช้คำสั่งเพื่อแทรก หรือปรับปรุงระเบียนหนึ่งครั้งโดยตรง เมื่อต้องการทำเช่นนี้ คุณสามารถสร้างการOLEDbCommandวัตถุการเชื่อมต่อและการตั้งค่านั้นCommandTextคุณสมบัติคำสั่งที่ถูกต้องการแทรกเร็กคอร์ด

    INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')
    หรือคำสั่งเพื่อปรับปรุงระเบียน

    UPDATE [Sheet1$] SET F2 = 'XYZ' WHERE F1 = '111'
    และเรียกใช้แล้ว นี้ExecuteNonQueryวิธีการ
  • ทำให้การเปลี่ยนแปลงไปยังชุดข้อมูลที่คุณได้กรอกข้อมูลกับตาราง/สอบถามจากสมุดงาน Excel และจากนั้น เรียกการปรับปรุงวิธีการนี้DataAdapterเมื่อต้องการแก้ไข การเปลี่ยนแปลงจากชุดข้อมูลกลับไปยังสมุดงาน อย่างไรก็ตาม การใช้การการปรับปรุงวิธีการเปลี่ยนความละเอียดที่คุณต้องการตั้งค่า parameterized คำสั่งสำหรับของ DataAdapterInsertCommand
    INSERT INTO [Sheet1$] (F1, F2) values (?, ?)
    และUpdateCommand:
    UPDATE [Sheet1$] SET F2 = ? WHERE F1 = ?
    คำสั่ง parameterized INSERT และ UPDATE จำเป็นต้องใช้เนื่องจากการOleDbDataAdapterไม่ใส่ข้อมูลคีย์/ดัชนี สำหรับสมุดงาน Excel ไม่ มีเขตข้อมูลคีย์/ดัชนี CommandBuilder ไม่สามารถสร้างโดยอัตโนมัติคำสั่งที่คุณได้
  • ส่งออกข้อมูลจากข้อมูลอื่นต้นทางลงในสมุดงาน Excel ที่แหล่งข้อมูลอื่น ๆ ที่สามารถใช้กับผู้ที่ Jet OLE DB ให้ ข้อมูลแหล่งที่มาที่คุณสามารถใช้กับผู้ที่ Jet OLE DB ให้ในลักษณะนี้ รวมถึงข้อความแฟ้ม ฐานข้อมูล Microsoft Access และ นอน สมุดงาน Excel อื่น มีคำเดียวแทรกลงในสั่ง คุณสามารถส่งออกข้อมูลจากตาราง/แบบสอบถามอื่นลงในสมุดงานของคุณ:
    INSERT INTO [Sheet1$] IN 'C:\Book1.xls' 'Excel 8.0;' SELECT * FROM MyTable"
    แทรกลงในต้องที่ตารางปลายทาง (หรือแผ่นงาน) อยู่ ข้อมูลถูกผนวกเข้ากับตารางปลายทาง

    คุณยังอาจใช้ SELECTINTO การส่งออกของตาราง/แบบสอบถามไปยังสมุดงาน:
    SELECT * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1] FROM [MyTable]
    เมื่อคุณใช้ SELECTเข้า ถ้าตารางเป้าหมายหรือสมุดงานไม่มีอยู่ ดังกล่าวจะถูกสร้างขึ้นสำหรับคุณ ถ้าตารางมีอยู่ก่อน SELECT แล้วในคำสั่งออก คุณจะได้รับข้อความแสดงข้อผิดพลาด
กระบวนการตัวอย่างรหัสส่วนต่อไปในบทความนี้แสดงแต่ละ approaches เหล่านี้เมื่อต้องการเพิ่ม และปรับปรุงระเบียนในสมุดงาน

ลบระเบียน

แม้ว่าผู้ที่ Jet OLE DB ให้อนุญาตให้คุณสามารถแทรก และการปรับปรุงระเบียนในสมุดงาน Excel นั้นไม่อนุญาตการดำเนินการลบ ถ้าคุณพยายามที่จะทำการดำเนินการลบในระเบียนอย่าง น้อยหนึ่ง คุณได้รับข้อความแสดงข้อความแสดงข้อผิดพลาดต่อไปนี้:
การลบข้อมูลในตารางที่เชื่อมโยงไม่ถูกสนับสนุน โดย ISAM นี้
ข้อจำกัดนี้คือชั้นใน treatment ของสมุดงาน Excel เป็นฐานข้อมูล

สร้างสมุดงานและตาราง

เมื่อต้องการสร้างตารางในสมุดงาน Excel รันตารางจะสร้างคำสั่ง:
CREATE TABLE Sheet1 (F1 char(255), F2 char(255))
เมื่อคุณเรียกใช้คำสั่งนี้ มีสร้างแผ่นงานใหม่ ด้วยชื่อของตารางคุณระบุในคำสั่ง ถ้าสมุดงานสำหรับการเชื่อมต่อไม่มีอยู่ ดังกล่าวเกินไปจะถูกสร้างขึ้น

กระบวนการตัวอย่างรหัสส่วนแสดงให้เห็นถึงวิธีการที่คุณสามารถใช้คำสั่งสร้างตารางเพื่อสร้างสมุดงานใหม่และตาราง

step-by-Step

ตัวอย่างรหัส

  1. เริ่มการทำงานของ.NET Visual Basic ที่ใหม่แอพลิเคชันของ windowsProject

    form1ถูกสร้างขึ้น โดยค่าเริ่มต้น
  2. เพิ่มตัวควบคุม RadioButton หกและตัวควบคุมปุ่มไปform1.
  3. เลือกตัวควบคุม RadioButton ทั้งหมด และการตั้งค่านี้sizeคุณสมบัติการ200,24.
  4. ในการมุมมองเมนู คลิกรหัส.
  5. เพิ่มบรรทัดต่อไปนี้เพื่อเริ่มต้นมากของโมดูลรหัส:
    Imports System.Data.OleDb
  6. แทรกรหัสต่อไปนี้ลงในแบบฟอร์มคลาส:
    Private m_sConn1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=C:\ExcelData1.xls;" & _
                   "Extended Properties=""Excel 8.0;HDR=YES"""
    
    Private m_sConn2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=C:\ExcelData2.xls;" & _
                   "Extended Properties=""Excel 8.0;HDR=YES"""
    
    Private m_sNorthwind = _
          "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    
    Private m_sAction As String
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          RadioButton1.Text = "Create_Workbook"
          RadioButton2.Text = "Retrieve_Records"
          RadioButton3.Text = "Add_Records"
          RadioButton4.Text = "Update_Records"
          RadioButton5.Text = "Update_Individual_Cells"
          RadioButton6.Text = "Use_External_Source"
          Button1.Text = "Go!"
    End Sub
    
    Private Sub RadioButtons_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
          Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click, _
          RadioButton4.Click, RadioButton5.Click, RadioButton6.Click
          m_sAction = sender.Text'Store the text for the selected radio button
    End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          Try
             ' Call the associated routine to add/update/modify the workbook.
             Select Case m_sAction
                Case "Create_Workbook" : Create_Workbook()
                Case "Retrieve_Records" : Retrieve_Records()
                Case "Add_Records" : Add_Records()
                Case "Update_Records" : Update_Records()
                Case "Update_Individual_Cells" : Update_Individual_Cells()
                Case "Use_External_Source" : Use_External_Source()
             End Select
    
          Catch ex As OleDbException
             Dim er As OleDbError
             For Each er In ex.Errors
                MsgBox(er.Message)
             Next
          Catch ex2 As System.InvalidOperationException
             MsgBox(ex2.Message)
          End Try
    
    
    End Sub
    
    Public Sub Create_Workbook()
    
          ' If the workbooks already exist, prompt to delete.
          Dim answer As MsgBoxResult
          If Dir("C:\ExcelData1.xls") <> "" Or Dir("C:\ExcelData2.xls") <> "" Then
              answer = MsgBox("Delete existing workbooks (C:\ExcelData1.xls and " & _
                       "C:\ExcelData2.xls)?", MsgBoxStyle.YesNo)
              If answer = MsgBoxResult.Yes Then
                  If Dir("C:\ExcelData1.xls") <> "" Then Kill("C:\ExcelData1.xls")
                  If Dir("C:\ExcelData2.xls") <> "" Then Kill("C:\ExcelData2.xls")
              Else
                  Exit Sub
              End If
          End If
    
    '==========================================================================
          ' Create a workbook with a table named EmployeeData. The table has 3 
          ' fields: ID (char 255), Name (char 255) and Birthdate (date).  
    '==========================================================================
          Dim conn As New OleDbConnection()
          conn.ConnectionString = m_sConn1
          conn.Open()
          Dim cmd1 As New OleDbCommand()
          cmd1.Connection = conn
          cmd1.CommandText = "CREATE TABLE EmployeeData (Id char(255), Name char(255), BirthDate date)"
          cmd1.ExecuteNonQuery()
          cmd1.CommandText = "INSERT INTO EmployeeData (Id, Name, BirthDate) values ('AAA', 'Andrew', '12/4/1955')"
          cmd1.ExecuteNonQuery()
          conn.Close()
    
    '==========================================================================
          ' Create a workbook with a table named InventoryData. The table has 3 
          ' fields: Product (char 255), Qty (float) and Price (currency). 
    '==========================================================================
    
          conn.ConnectionString = m_sConn2
          conn.Open()
          Dim cmd2 As New OleDbCommand()
          cmd2.Connection = conn
          cmd2.CommandText = "CREATE TABLE InventoryData (Product char(255), Qty float, Price currency)"
          cmd2.ExecuteNonQuery()
          cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Cola', 200, 1.35)"
          cmd2.ExecuteNonQuery()
          cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Chips', 550, 0.89)"
          cmd2.ExecuteNonQuery()
          conn.Close()
    
          ' NOTE: You can ALTER and DROP tables in a similar fashion.
    
    End Sub
    
    Public Sub Retrieve_Records()
    
          '==========================================================
          'Use a DataReader to read data from the EmployeeData table.
          '==========================================================
    
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd1 As New System.Data.OleDb.OleDbCommand("Select * From [EmployeeData$]", conn1)
          Dim rdr As OleDbDataReader = cmd1.ExecuteReader
    
          Debug.WriteLine(vbCrLf & "EmployeeData:" & vbCrLf & "=============")
          Do While rdr.Read()
             Debug.WriteLine(System.String.Format("{0,-10}{1, -15}{2}", _
                rdr.GetString(0), rdr.GetString(1), _
                rdr.GetDateTime(2).ToString("d")))
          Loop
          rdr.Close()
          conn1.Close()
    
          '========================================================
          'Use a DataSet to read data from the InventoryData table.
          '========================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds)
          Debug.WriteLine(vbCrLf & "InventoryData:" & vbCrLf & "==============")
          Dim dr As DataRow
          For Each dr In ds.Tables(0).Rows'Show results in output window
             Debug.WriteLine(System.String.Format("{0,-15}{1, -6}{2}", _
                dr("Product"), dr("Qty"), dr("Price")))
          Next
          conn2.Close()
    
    End Sub
    
    Public Sub Add_Records()
    
    '==========================================================================
          ' Run an INSERT INTO command to add new records to the workbook. 
    '==========================================================================
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn1
          cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('CCC', 'Charlie', '10/14/48')"
          cmd.ExecuteNonQuery()
          cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('DDD', 'Deloris', '7/19/98')"
          cmd.ExecuteNonQuery()
          conn1.Close()
    
          '====================================================================
          'Use the InsertCommand object to add new records to the InventoryData
          'table.
          '====================================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds, "MyExcelTable")
    
          ' Generate the InsertCommand and add the parameters for the command.
          da.InsertCommand = New OleDbCommand( _
             "INSERT INTO [InventoryData$] (Product, Qty, Price) VALUES (?, ?, ?)", conn2)
          da.InsertCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")
          da.InsertCommand.Parameters.Add("@Qty", OleDbType.Double).SourceColumn = "Qty"
          da.InsertCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"
    
          ' Add two new records to the dataset.
          Dim dr As DataRow
          dr = ds.Tables(0).NewRow
          dr("Product") = "Bread" : dr("Qty") = 390 : dr("Price") = 1.89 : ds.Tables(0).Rows.Add(dr)
          dr = ds.Tables(0).NewRow
          dr("Product") = "Milk" : dr("Qty") = 99 : dr("Price") = 2.59 : ds.Tables(0).Rows.Add(dr)
    
          ' Apply the dataset changes to the actual data source (the workbook).
          da.Update(ds, "MyExcelTable")
          conn2.Close()
    
    End Sub
    
    Public Sub Update_Records()
    
    '==========================================================================
          ' Run an UPDATE command to change a record in the EmployeeData
          ' table.
    '==========================================================================
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn1
          cmd.CommandText = "UPDATE [EmployeeData$] " & _
                        "SET NAME = 'Aaron', BirthDate = '5/4/1975' WHERE ID = 'AAA'"
          cmd.ExecuteNonQuery()
          conn1.Close()
    
          '====================================================================
          ' Use the UpdateCommand object to modify records in the InventoryData
          ' table.
          '====================================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds, "MyInventoryTable")
    
          ' Generate the UpdateCommand and add the parameters for the command.
          da.UpdateCommand = New OleDbCommand( _
             "UPDATE [InventoryData$] SET Qty = ?, Price=? WHERE Product = ?", conn2)
          da.UpdateCommand.Parameters.Add("@Qty", OleDbType.Numeric).SourceColumn = "Qty"
          da.UpdateCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"
          da.UpdateCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")
    
          ' Update the first two records.
          ds.Tables(0).Rows(0)("Qty") = 1000
          ds.Tables(0).Rows(0)("Price") = 10.1
          ds.Tables(0).Rows(1)("Qty") = 2000
          ds.Tables(0).Rows(1)("Price") = 20.2
    
          ' Apply the dataset changes to the actual data source (the workbook).
          da.Update(ds, "MyInventoryTable")
          conn2.Close()
    
    End Sub
    
    Public Sub Update_Individual_Cells()
    
    '==========================================================================
          ' Update individual cells on the EmployeeData worksheet; 
          ' specifically, cells F3, G3, and I4 are modified.
    '==========================================================================
    
          ' NOTE: The connection string indicates that the table does *NOT* 
          ' have a header row.
          Dim conn As New System.Data.OleDb.OleDbConnection(m_sConn1.Replace("HDR=YES", "HDR=NO"))
          conn.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn
          cmd.CommandText = "UPDATE [EmployeeData$F3:G3] SET F1 = 'Cell F3', F2 = 'Cell G3'"
          cmd.ExecuteNonQuery()
          cmd.CommandText = "UPDATE [EmployeeData$I4:I4] SET F1 = 'Cell I4'"
          cmd.ExecuteNonQuery()
          conn.Close()
    
    End Sub
    
    Public Sub Use_External_Source()
    
          ' Open a connection to the sample Northwind Access database.
          Dim conn As New System.Data.OleDb.OleDbConnection( _
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_sNorthwind & ";")
          conn.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn
    
    '=======================================================================
          ' Run an INSERT..INTO command on the Northwind database to append 
          ' the records from a table/query to an existing table in the Excel 
          ' workbook.
    '=======================================================================
          cmd.CommandText = "INSERT INTO [EmployeeData$] IN 'C:\ExcelData1.xls' 'Excel 8.0;'" & _
             "SELECT EmployeeID AS ID, FirstName AS Name, BirthDate FROM Employees"
          cmd.ExecuteNonQuery()
    
    '==========================================================================
          ' Run a SELECT..INTO command on the Northwind database to insert 
          ' all the records from a table/query into a new sheet in the Excel 
          ' workbook.
    '==========================================================================
          cmd.CommandText = "SELECT * INTO [Excel 8.0;Database=C:\ExcelData2.xls].[ProductSales]" & _
                          "FROM [Product Sales for 1997]"
          cmd.ExecuteNonQuery()
    
          conn.Close()
    
    End Sub
  7. ปรับเปลี่ยนเส้นทางไปยังตัวอย่างฐานการเข้าถึงข้อมูล Northwind สำหรับสมาชิก m_sNorthwind ในรหัส ถ้าจำเป็น

ลองได้ไม่เพียงพอ

  1. ในการมุมมองเมนู ให้ชี้ไปที่Windows อื่น ๆแล้ว คลิกเอาพุตเมื่อต้องการแสดงนี้เอาพุตหน้าต่าง
  2. กด F5 เพื่อสร้างและเรียกใช้โปรแกรม
  3. คลิกCreate_Workbookแล้ว คลิกไปยัง. กระบวนการCreate_Workbookกระบวนการเรียกใช้คำสั่งสร้างตารางเพื่อสร้างสมุดงานใหม่ที่สอง: C:\ExcelData1.xls และ C:\ExcelData2.xls ExcelData1.xls ประกอบด้วยแผ่นงานหนึ่ง (ตาราง) ชื่อ EmployeeData ExcelData2.xls มีหนึ่งแผ่น (ตาราง) InventoryData การตั้งชื่อ ตารางมีเติมกับเรกคอร์ด

    หมายเหตุ:: ในขั้นตอนแต่ละที่เหลือในการทดสอบนี้ เปิดสมุดงานนี้ใน Excel ให้ตรวจสอบผลลัพธ์ หรือ คลิกRetrieve_Recordsเมื่อต้องการดูเนื้อหาของตารางในนั้นเอาพุตหน้าต่างของ Visual Studio .NET
  4. คลิกRetrieve_Recordsแล้ว คลิกไปยัง. กระบวนการRetrieve_Recordsแยกระเบียนจากตาราง และแสดงในขั้นตอนนี้เอาพุตหน้าต่าง เหมือนกับข้อความนี้:
    EmployeeData:
    =============
    AAA       Andrew         12/4/1955
    
    InventoryData:
    ==============
    Cola           200   1.35
    Chips          550   0.89
  5. คลิกAdd_Recordsแล้ว คลิกไปยัง. กระบวนการAdd_Recordsชุดคำสั่งเพิ่มระเบียนที่สองให้กับแต่ละตาราง:
    EmployeeData:
    =============
    AAA       Andrew         12/4/1955
    CCC       Charlie        10/14/1948
    DDD       Deloris        7/19/1998
    
    InventoryData:
    ==============
    Cola           200   1.35
    Chips          550   0.89
    Bread          390   1.89
    Milk           99    2.59
  6. คลิกUpdate_Recordsแล้ว คลิกไปยัง. กระบวนการUpdate_Recordsขั้นตอนการปรับปรุงระเบียนที่สองในแต่ละสมุดงาน:
    EmployeeData:
    =============
    AAA       Aaron          5/4/1975
    CCC       Charlie        10/14/1948
    DDD       Deloris        7/19/1998
    
    InventoryData:
    ==============
    Cola           1000  10.1
    Chips          2000  20.2
    Bread          390   1.89
    Milk           99    2.59
  7. คลิกUpdate_Individual_Cellsแล้ว คลิกไปยัง. กระบวนการUpdate_Individual_Cellsขั้นตอนการปรับเปลี่ยนเฉพาะเซลล์บนแผ่นงาน EmployeeData ใน ExcelData1.xls โดยเฉพาะอย่างยิ่ง การปรับปรุงเซลล์ F3, G3 และ I4
  8. คลิกUse_External_Sourceแล้ว คลิกไปยัง. เมื่อคุณใช้ INSERT ข้อในคำสั่ง การUse_External_Sourceชุดคำสั่ง appends ระเบียนจากตาราง Northwind 'พนักงาน' ไปยังแผ่นงาน EmployeeData ใน ExcelData1.xls และUse_External_Sourceใช้แบบ SELECTในคำสั่งเพื่อสร้างตารางใหม่ (หรือแผ่นงาน) ใน ExcelData2.xls ซึ่งประกอบด้วยทั้งหมดของระเบียนจากตาราง Northwind 'ผลิตภัณฑ์'

    หมายเหตุ:: ถ้าคุณคลิกUse_External_Sourceเวลาที่มากกว่าหนึ่ง รายชื่อพนักงานจะถูกผนวกหลายครั้งเนื่องจากคีย์หลักคีย์ไม่รู้จัก หรือใช้

เซลล์ที่มีการจัดรูปแบบ

ถ้าคุณกำลังใช้ ADO.NET เพื่อเพิ่ม หรือปรับปรุงระเบียนในสมุดงานที่อยู่ คุณสามารถใช้การจัดรูปแบบไปยังสมุดงานที่จะใช้กับเรกคอร์ดใหม่ หรือปรับปรุง เซลล์ เมื่อคุณอัพเดมีเรกคอร์ดที่อยู่ (หรือแถว) ในสมุดงาน การจัดรูปแบบเซลล์แบบถูกรักษาไว้ และเมื่อคุณแทรกเร็กคอร์ดใหม่ (หรือแถว) ในสมุดงาน เรกคอร์ดใหม่สืบทอดการจัดรูปแบบจากแถวอยู่เหนือดังกล่าว

ขั้นตอนต่อไปนี้แสดงวิธีการใช้การจัดรูปแบบในสมุดงานที่มีรหัสตัวอย่าง:
  1. กด F5 เพื่อสร้าง และเรียกใช้ตัวอย่าง
  2. บน Form1 คลิกCreate_Workbookแล้ว คลิกไปยัง.
  3. เริ่มการทำงานของ Microsoft Excel และเปิด C:\ExcelData1.xls
  4. ใช้ลักษณะแบบอักษรตัวหนากับเซลล์ A2
  5. ใช้เป็นตัวเอียง ขีดเส้นใต้ลักษณะไปเซลล์ B2 และจัดศูนย์
  6. ใช้วันแบบเต็มรูปแบบเซลล์ C2
  7. บันทึก และปิด C:\ExcelData1.xls
  8. บน Form1 คลิกAdd_Recordsแล้ว คลิกไปยัง.
  9. เปิด C:\ExcelData1.xls ใน Excel และขอให้สังเกตว่า สองแถวใหม่ได้มาการจัดรูปแบบจากแถวแรก

ข้อจำกัด

ต่อไปนี้คือ บางข้อจำกัดของผู้ที่ Jet OLE DB ให้เกี่ยวข้องกับแหล่งข้อมูลของ Excel ที่ใช้งาน:
  • คุณไม่สามารถใส่สูตรในเซลล์ที่ใช้ ADO.NET
  • ผู้ที่ Jet OLE DB ให้ไม่สามารถให้ข้อมูลคีย์/ดัชนีสำหรับตารางที่อยู่ในสมุดงาน Excel ด้วยเหตุผลนี้ คุณไม่สามารถใช้ CommandBuilder โดยอัตโนมัติให้สร้างการปรับปรุงและการแทรกสำหรับเรกคอร์ดในสมุดงาน Excel

ข้อมูลอ้างอิง

หากต้องการทราบข้อมูลเพิ่มเติม โปรดคลิกที่หมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base::
316756PRB: ข้อผิดพลาดขึ้นเมื่อคุณใช้ OLEDbDataAdapter ADO.NET การแก้ไขสมุดงาน Excel
257819วิธีการใช้ ADO กับข้อมูล Excel จาก Visual Basic หรือ VBA
306022วิธีการโอนย้ายข้อมูลไปยังสมุดงาน Excel โดยใช้ Visual Basic .NET
306023วิธีการถ่ายโอนข้อมูลไป Excel สมุดงานที่ใช้ Visual .NET c#
311731วิธีการแบบสอบถามและข้อมูลการแสดงผล Excel โดยใช้ ASP.NET, ADO.NET และ Visual Basic .NET
306572วิธีการแบบสอบถามและข้อมูลการแสดงผล Excel โดยใช้ ASP.NET, ADO.NET และ Visual c# .NET
278973ตัวอย่าง: ExcelADO อธิบายวิธีการที่ใช้ ADO ในการอ่าน และเขียนข้อมูลในสมุดงาน Excel

คุณสมบัติ

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

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

 

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