(注:注释的颜色原本为绿色,在这里变为黑色,有点不便,但不会造成阅读影响。放入Visual Basic2012代码编辑器后会还原成绿色。)

  :DataGridView控件作为数据传输的中介,只需简短的几行代码,可以实现数据元素的无缝传递。在这篇简短的案例中,我所做的只是数据传输的最简短代码,在界面的视觉感上,几乎没有任何吸引人的地方。不过,我要追求的可不是什么高级代码片段,而是活代码——在完全可工作的程序环境下,就可以迅速实现一个完整的程序。

关键字:DataGridView控件;Excel 2010;数据;SQL server 2012;

座右铭:一招鲜,吃遍天。——爱默生(美国作家)

具体的操作步骤:

第一步:创建一个“Excel 2010数据导入SQL Server 2012”(“开始”——>“所有程序”——>“Microsoft Visual Studio 2012”——>“Visual Studio 2012”——>“开始”——>“新建”——>“项目”选中Visual Basic、选中Window应用程序——>名称中输入Excel数据导入SQL Server——“确定”)。

第二步:创建程序界面。(在工具箱中添加一个DataGridView控件,两个Button按钮。

第三步:设置窗体和控件属性。

窗体或控件

属性名称

属性值

窗体form1

Text

Excel 2010数据导入SQL Server 2012

Button1

Text

Excel数据导入DataGridView

(Name)

excelToDataGridView_Button

Button2

Text

DataGridView导入到SQL server

(Name)

dataGridViewtoSQLserver_Button

DataGridView1

默认

默认

第四步:编写代码:

   a:导入三个名称空间绿色字是注释,不会被编译

      

Imports System.Data            '本例中由于使用DataSet类,又不想输入全名,就必须导入System.Data名称空间
Imports System.Data.SqlClient '本例中由于使用SQLConnection、SqlDataAdapter、SqlCommand、SqlParameter类,‘又不想输入全名,就必须导入System.Data.SqlClient名称空间
Imports System.Data.OleDb '本例中由于使用OleDb Connection、OleDb DataAdapter、OleDb Commandr类,‘又不想输入全名,就必须导入System.Data.SqlClient名称空间

b:添加excelToDataGridView_Button按钮的单击事件(绿色字是注释,不会被编译

  Private Sub excelToDataGridView_Button_Click(sender As Object, e As EventArgs) Handles excelToDataGridView_Button.Click

           '定义连接Excel的字符串

           Dim strConn As String

           ' IMEX=1 可把混合型作为文本型读取,避免null值, Data Source=Test.xlsx表示项目Debug文件中的文件Test.xlsx

           'Test.xlsx文件中的sheet1表中的第一行将会是导入DataGridView1中的标题

           strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Test.xlsx;Extended Properties='Excel 12.0;HDR=False;IMEX=1'"

           '定义OleDbConnection对象

           Dim oleConn As OleDbConnection

           '将连接字符串strConn赋值给对象oleConn

           oleConn = New OleDbConnection(strConn)

           '打开数据库

           oleConn.Open()

           '定义查询字符串

           Dim sql As String

           '给字符串赋值

           sql = "SELECT * FROM  [Sheet1$]" '可更改Sheet名称,根据实际情况而定,默认名是sheet1,sheet2……  

           '定义OleDbDataAdapter对象

           Dim oleDaExcel As OleDbDataAdapter

           '给对象oleDaExcel赋值,OleDbDataAdapter(String, OleDbConnection),第一个参数为连接字符串,第二个参数是连接对象

           oleDaExcel = New OleDbDataAdapter(sql, oleConn)

           Dim ds As DataSet '定义DataSet对象

           ds = New DataSet() '给对象ds赋值

           oleDaExcel.Fill(ds, "MyTable")  '此句OledbDataAdaper类的Fill方法作用:将DataSet对象中的数据填充到MyTable(随便设的)中

           DataGridView1.DataSource = ds '将控件DataGridView1的数据源设置为DataSet对象

           DataGridView1.DataMember = "MyTable" '将控件DataGridView1的数据元素设置为MyTable

           oleConn.Close() '关闭数据库

    End Sub

C:添加dataGridViewtoSQLserver_Button按钮的单击事件(绿色字是注释,不会被编译

      

 Private Sub dataGridViewtoSQLserver_Button_Click(sender As Object, e As EventArgs) Handles dataGridViewtoSQLserver_Button.Click

          'My.Application.Info.DirectoryPath指的是项目的Debug文件,我的电脑默认为:C:\Users\Administrator\Documents\Visual Studio 2012\Projects\Excel数据导入SQL Server\Excel数据导入SQL Server\bin\Debug

          Dim objConnection As SqlConnection = New SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=" & My.Application.Info.DirectoryPath & "\books.mdf;Persist Security Info = False")

        '定义SqlCommand对象,实现对SQL server数据库文件的操作

          Dim objCommand As SqlCommand = New SqlCommand()

          Dim i, j As Integer 'i为行,j为总行数

          j = DataGridView1.Rows.Count '获取总行数DataGridView1.Rows.Count;获取总列数DataGridView1.Columns.Count。

          For i =  To j -   'j 为行  DataGridView1的数据坐标以(0,0)开始

              objConnection.Open() '打开数据库

              objCommand.Connection = objConnection '将sqlCommand对象连接打开的数据

              'sqlCommand对象执行数据查询,@FirstName和@LastName中的FirstName与LastName是可以任意设置的,比如:@FName, @LName。

              objCommand.CommandText = "INSERT INTO Authors ( FirstName, LastName ) VALUES ( @FirstName, @LastName )"

              objCommand.Parameters.AddWithValue("@FirstName", DataGridView1.Item(, i).Value)

              objCommand.Parameters.AddWithValue("@LastName", DataGridView1.Item(, i).Value)

              '此时若用objCommand.ExecuteNonQuery(),就只执行第一条记录,并提示错误,所以必须用objCommand.ExecuteNonQueryAsync()

              '若只添加一条完整的记录,比如添加几个TextBox.text值,强烈建议用objCommand.ExecuteNonQuery(),速度快

              objCommand.ExecuteNonQueryAsync() '这种异步执行操作实质操作的是数据库副本,所以可以避免@FirstName的唯一性。

              objConnection.Close()

              objCommand.Parameters.Clear() '这是非常关键的一个语句,决定着是否能够顺利循环执行对象objCommand的所有语句,这个语句我琢磨了一天

          Next i

          MessageBox.Show("数据导入" & j -  & "条数据", "导入提示") '因为要除去标题,所以必须在所有行的基础上减1,即j-1才表示实际导入的行数

      End Sub

       d:向本项目的Debug文件中添加一个test.xlsxBooks.mdf数据库:

我的默认路径为C:\Users\Administrator\Documents\Visual Studio 2012\Projects\Excel数据

导入SQL Server\Excel数据导入SQL Server\bin\Debug中。

test.xlsx文件的内容:                      

  

 

Books.mdf数据库Authors表的内容

 

        我的Debug文件夹中的文件如下图:

       

 

第五步:运行程序。

              A:未运行图

              

             B:单击“Excel数据导入DataGridView”按钮,运行结果。

              

             C:单击“DataGridView导入到SQL server”按钮,运行结果。

                

             D:用SQL server 2012 打开Debug文件夹中的Books.mdf文件。

               (由于Books.mdf数据库Authors表的AuthorID列是自动增长的,并且我做过几次测试,所以

在第5行之后出现了41行、42行、43行、44行、45行的连续行,即是导入的5条数据。)

             

附:完整代码:

Imports System.Data            '本例中由于使用DataSet类,又不想输入全名,就必须导入System.Data名称空间
Imports System.Data.SqlClient '本例中由于使用SQLConnection、SqlDataAdapter、SqlCommand、SqlParameter类,又不想输入全名,就必须导入System.Data.SqlClient名称空间
Imports System.Data.OleDb '本例中由于使用OleDb Connection、OleDb DataAdapter、OleDb Commandr类,又不想输入全名,就必须导入System.Data.SqlClient名称空间 Public Class Form1
Private Sub excelToDataGridView_Button_Click(sender As Object, e As EventArgs) Handles excelToDataGridView_Button.Click
'定义连接Excel的字符串
Dim strConn As String
' IMEX=1 可把混合型作为文本型读取,避免null值, Data Source=Test.xlsx表示项目Debug文件中的文件Test.xlsx
'Test.xlsx文件中的sheet1表中的第一行将会是导入DataGridView1中的标题
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Test.xlsx;Extended Properties='Excel 12.0;HDR=False;IMEX=1'"
'定义OleDbConnection对象
Dim oleConn As OleDbConnection
'将连接字符串strConn赋值给对象oleConn
oleConn = New OleDbConnection(strConn)
'打开数据库
oleConn.Open()
'定义查询字符串
Dim sql As String
'给字符串赋值
sql = "SELECT * FROM [Sheet1$]" '可更改Sheet名称,根据实际情况而定,默认名是sheet1,sheet2……
'定义OleDbDataAdapter对象
Dim oleDaExcel As OleDbDataAdapter
'给对象oleDaExcel赋值,OleDbDataAdapter(String, OleDbConnection),第一个参数为连接字符串,第二个参数是连接对象
oleDaExcel = New OleDbDataAdapter(sql, oleConn)
Dim ds As DataSet '定义DataSet对象
ds = New DataSet() '给对象ds赋值
oleDaExcel.Fill(ds, "MyTable") '此句OledbDataAdaper类的Fill方法作用:将DataSet对象中的数据填充到MyTable(随便设的)中
DataGridView1.DataSource = ds '将控件DataGridView1的数据源设置为DataSet对象
DataGridView1.DataMember = "MyTable" '将控件DataGridView1的数据元素设置为MyTable
oleConn.Close() '关闭数据库
End Sub Private Sub dataGridViewtoSQLserver_Button_Click(sender As Object, e As EventArgs) Handles dataGridViewtoSQLserver_Button.Click
'My.Application.Info.DirectoryPath指的是项目的Debug文件,我的电脑默认为:C:\Users\Administrator\Documents\Visual Studio 2012\Projects\Excel数据导入SQL Server\Excel数据导入SQL Server\bin\Debug
Dim objConnection As SqlConnection = New SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=" & My.Application.Info.DirectoryPath & "\books.mdf;Persist Security Info = False")
'定义SqlCommand对象,实现对SQL server数据库文件的操作
Dim objCommand As SqlCommand = New SqlCommand()
Dim i, j As Integer 'i为行,j为总行数
j = DataGridView1.Rows.Count '获取总行数DataGridView1.Rows.Count;获取总列数DataGridView1.Columns.Count。
For i = To j - 'j 为行 DataGridView1的数据坐标以(0,0)开始
objConnection.Open() '打开数据库
objCommand.Connection = objConnection '将sqlCommand对象连接打开的数据
'sqlCommand对象执行数据查询,@FirstName和@LastName中的FirstName与LastName是可以任意设置的,比如:@FName, @LName。
objCommand.CommandText = "INSERT INTO Authors ( FirstName, LastName ) VALUES ( @FirstName, @LastName )"
objCommand.Parameters.AddWithValue("@FirstName", DataGridView1.Item(, i).Value)
objCommand.Parameters.AddWithValue("@LastName", DataGridView1.Item(, i).Value)
'此时若用objCommand.ExecuteNonQuery(),就只执行第一条记录,并提示错误,所以必须用objCommand.ExecuteNonQueryAsync()
'若只添加一条完整的记录,比如添加几个TextBox.text值,强烈建议用objCommand.ExecuteNonQuery(),速度快
objCommand.ExecuteNonQueryAsync() '这种异步执行操作实质操作的是数据库副本,所以可以避免@FirstName的唯一性。
objConnection.Close()
objCommand.Parameters.Clear() '这是非常关键的一个语句,决定着是否能够顺利循环执行对象objCommand的所有语句,这个语句我琢磨了一天
Next i
MessageBox.Show("数据导入" & j - & "条数据", "导入提示") '因为要除去标题,所以必须在所有行的基础上减1,即j-1才表示实际导入的行数
End Sub
End Class

Visual Basic 2012 借助DataGridView控件将Excel 2010数据导入到SQL server 2012的更多相关文章

  1. Visual Basic 2012 借助DataGridView控件将SQL server2012 数据导入到Excel 2010

    摘  要: SQL Server 2012 数据和Excel 2010之间的连接和数据的传输,本篇文章主要针对的是SQL Server 2012 数据导入到Excel 2010文件中.Excel软件对 ...

  2. datagridview控件--导出Excel

    dataGridView控件可以说很方便的显示了数据,而且对于修改和删除数据也很方便,我在前面的一篇博客中写到了如何去绑定数据到该控件上dataGridView控件--绑定数据方法,今天我将如何将数据 ...

  3. DataGridView:DataGridView控件清空绑定的数据

    使用DataGridView控件绑定数据后有时需要清空绑定的数据,在清除DataGridView绑定的数据时: 1.设置DataSource为null this.dgvDemo.DataSource ...

  4. 如何用visual studio控件(repeater)绑定数据库(SQL server)信息并显示

    今天学习了下如何间接绑定数据库网上看了很多信息,都云里雾里,没有图片说明,初学者完全看不懂,我自己做了一个DEMO,相信可以帮到大家! 一.建立数据库,并构建表信息,我的表信息如下: 表中的数据在数据 ...

  5. 基于C#语言MVC框架NPOI控件导出Excel表数据

    控件bin文件下载地址:https://download.csdn.net/download/u012949335/10610726@{ ViewBag.Title = "dcxx" ...

  6. 基于C#语言MVC框架Aspose.Cells控件导出Excel表数据

    控件bin文件下载地址:https://download.csdn.net/download/u012949335/10610726 @{ ViewBag.Title = "xx" ...

  7. DataGridView控件

    DataGridView控件 DataGridView是用于Windows Froms 2.0的新网格控件.它可以取代先前版本中DataGrid控件,它易于使用并高度可定制,支持很多我们的用户需要的特 ...

  8. DataGridView控件-[引用]

    DataGridView控件 DataGridView是用于Windows Froms 2.0的新网格控件.它可以取代先前版本中DataGrid控件,它易于使用并高度可定制,支持很多我们的用户需要的特 ...

  9. DataGridView控件使用大全说明-各种常用操作与高级操作

    DataGridView控件 DataGridView是用于Windows Froms 2.0的新网格控件.它可以取代先前版本中DataGrid控件,它易于使用并高度可定制,支持很多我们的用户需要的特 ...

随机推荐

  1. 迈出第一步:自适应高度的ImageView(AutoHeightImageView)

    这个博客注册很久了,可是一直都没有勇气来写一点东西.今天解决了一个让我纠结很久的问题,于是,我决定开始我的博客生涯,希望我能坚持下去. 不知道是不是只有我遇到了这个问题,在ListView中显示图片, ...

  2. VMWare虚拟机设置固定ip上网方法

    转自:http://blog.csdn.net/cyberrusher/article/details/7269795 1. 在VMWare工具栏中打开:编辑--->虚拟机网络编辑器, 打开VM ...

  3. 解决qt程序运行时的cannot create Qt for Embedded Linux data directory: /tmp/qtembedded-0出错情形

    1.mkdir /tmp 2.挂载 mount -t tmpfs -o size=32m none /tmp

  4. Linux解读

    Linux中权限(r.w.x)对于目录与文件的意义 一.权限对于目录的意义 1.首先要明白的是目录主要的内容是记录文件名列表和子目录列表,而不是实际存放数据的地方. 2.r权限:拥有此权限表示可以读取 ...

  5. POI 解析xls

    1.所需jar包 poi-3.6.jar poi-ooxml-3.6.jar 2.M.java package junit; import java.io.FileInputStream; impor ...

  6. MyBatis 入门(一)

    MyBatis mybatis和hibernate都属于orm(对象与关系映射) 框架 mybatis的优点: 1.sql-mapping :操作更自由,可控性高,执行效率更高 2.轻量,学习更容易 ...

  7. Linux内核创建一个新进程

    张雨梅   原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000 创建新进程 如果同一个程序被多 ...

  8. zoj3806Incircle and Circumcircle

    链接 自己的本本没有装画图软件,先借用两张图片..博客园不让贴源地址... 可以想到对于一个确定的外接圆的三角形来说内切圆最大的时候为等边三角形,如下图: 确定有合法的解之后,接下来就是去找这个解,解 ...

  9. IIS7.0 Appcmd 命令详解和定时重启应用池及站点的设置

    IIS7.0 Appcmd 命令详解 废话不说!虽然有配置界面管理器!但是做安装包的时候命令创建是必不可少的!最近使用NSIS制作安装包仔细研究了一下Appcmd的命令,可谓是功能齐全. 上网查了些资 ...

  10. 转:Eclipse快捷键 10个最有用的快捷键

    Eclipse快捷键 10个最有用的快捷键 Eclipse中10个最有用的快捷键组合  一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代 ...