使用两个DataAdapter使用OleDbConnection Excel到DataGridView
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用两个DataAdapter使用OleDbConnection Excel到DataGridView相关的知识,希望对你有一定的参考价值。
1-将C:\ Book1.xlsx文件创建到C盘。
2-确保在名为Sheet1的C:\ Book1.xlsx文件中有一个工作表。
3-用一些数据填充从A1细胞到E20细胞的Sheet1细胞。
4-关闭C:\ Book1.xlsx文件。
5-将一个DataGridView放入Form1并将其命名为DataGridView1。
6-运行代码以查看是否能够正确地将Excel数据传输到DataGridView。
如您所见,我使用了两个OleDbDataAdapter,以便将Excel数据传输到DataGridView。
我更喜欢使用两个OleDbDataAdapter,因为如果excel数据如此之大,我会遇到内存不足的问题。
如果检查我的代码,您将看到myDataAdapter1从A1单元格到E10单元格获得excel数据。和myDataAdapter2应该从A11单元格到E20单元格获得excel数据。
如果您检查我的代码,您将看到我尝试合并两个DataTable并绑定到DataGridView1.DataSource但没有成功。
请更正我的代码并告诉我如何合并两个DataTables并绑定到DataGridView1.DataSource?
我想从A1单元格到E20单元格获取excel数据,并使用两个DataAdapter和两个DataTables放置DataGridView1。
如果我使用一个数据适配器,那么我的应用程序会崩溃大数据。
所以我尝试使用两个数据适配器和两个数据表。
网格必须首先添加列以容纳数据。然后在While循环中添加行。我在Excel的测试数据中只有3列。
Private Sub PrepareGrid()
DataGridView1.Columns.Add("col1", "Column 1")
DataGridView1.Columns.Add("col2", "Column 2")
DataGridView1.Columns.Add("col3", "Column 3")
End Sub
Private Sub FillFromExcel()
Dim FileName As String = "Book1.xlsx" '"C:\Book1.xlsx"
Using cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & FileName & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";")
Using cmd As New OleDbCommand("SELECT * FROM [Sheet1$];", cn)
cn.Open()
Using reader = cmd.ExecuteReader
While reader.Read
DataGridView1.Rows.Add(reader(0), reader(1), reader(2))
End While
End Using
End Using
End Using
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
PrepareGrid()
FillFromExcel()
End Sub
没有主键,DataTable.Merge
无法工作。我骗了DataTable.Load(IDataReader)
,但必须使用下面的Merge。因此,您可以将主键添加到Excel工作表(只是排序行号列)并在代码中设置适当的属性,或手动循环第二个DataTable将记录添加到网格中。 (慢)
这是一种用所有数据填充网格的略微不同的方法。我没有要测试的大型Excel工作表。它可能会解决内存问题,但我担心它会在下面使用相同的方法。
Private Sub FillFromExcel()
Dim FileName As String = "Book1.xlsx" '"C:\Book1.xlsx"
Dim dt As New DataTable
Using cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & FILENAME & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";")
Using cmd As New OleDbCommand("SELECT * FROM [Sheet1$];", cn)
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
DataGridView1.DataSource = dt
End Sub
您可以从Excel文件转到DGV,就像这样。
Imports System.Data.SqlClient
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim DtSet As System.Data.DataSet
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\vb.net-informations.xls';Extended Properties=Excel 8.0;")
MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)
MyCommand.TableMappings.Add("Table", "Net-informations.com")
DtSet = New System.Data.DataSet
MyCommand.Fill(DtSet)
DataGridView1.DataSource = DtSet.Tables(0)
MyConnection.Close()
End Sub
End Class
以上是关于使用两个DataAdapter使用OleDbConnection Excel到DataGridView的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# dataAdapter.Fill() 和 dataAdapter.Update() 将表的数据从一个数据库传输到另一个数据库的同一个表
使用 Dataadapter 更新时发生 DBConcurrency 异常
不带 AMD 的 Select2 自定义 dataAdapter
如何使用 SqlCommand 和 DataAdapter 以使用 C# 操作 SQL Server
哪位高手简洁分析下ADO.NET中的常用对象:DataAdapter、Command、DataSet的使用情况。。非常感谢!!