Excel 数据导入到SQL SE福特ExplorerVE奥迪Q7

要: SQL Server 2012 数据和Excel
2010之间的连接和数据的传输,本篇文章主要针对的是SQL Server 2012
数据导入到Excel
2010文件中。Excel软件对数据的修改和编辑具有很大的优势,而SQL
Server在数据的查询、存储以及安全方面是Excel无法相比的。因此,通过Visual
Basic实现了Excel和SQL
server之间的数据传输可以很好地结合两者的优点,更好更快地编辑,修改和存储数据。

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

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

     #region Import data from excel to SQL.

        /// <summary>
        /// Import data from excel to SQL Server, but the difference struct of table . 
        /// </summary>
        public static void ImportDataFromExcelToSQLDemo(string filename)
        {

            // Load Excel data into DataTable
            string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;
            Data Source=" + filename + ";Extended Properties='Excel 12.0;HDR=YES;'";

            string strSQL = "SELECT * FROM [Sh1$]";
            OleDbConnection excelConnection = new OleDbConnection(connectionString);
            excelConnection.Open(); // This code will open excel file.

            OleDbCommand dbCommand = new OleDbCommand(strSQL, excelConnection);
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);

            // create data table
            DataTable dTable = new DataTable();
            //fill table with echel data
            dataAdapter.Fill(dTable);

            //step 2 
            //connect to server
            using (SqlConnection destinationConnection = new SqlConnection(DestinationConnStr))
            {
                destinationConnection.Open();

                using (SqlBulkCopy bulkCopy =
                        new SqlBulkCopy(destinationConnection))
                {
                    // Destination Table must match columns in Excel sheet
                    string tableName = "SH_1";
                    bulkCopy.DestinationTableName = tableName;

                    try
                    {
                        // Write from the source to the destination.
                        bulkCopy.WriteToServer(dTable);
                    }
                    catch (Exception ex)
                    {
                        CommonDo.DoException.DealException(ex);
                    }
                    destinationConnection.Close();
                }
            }

            // dispose used objects
            dTable.Dispose();
            dataAdapter.Dispose();
            dbCommand.Dispose();

            excelConnection.Close();
            excelConnection.Dispose();
        }

        #endregion

        #region Import data from excel to SQL Server using map.
        /// <summary>
        /// Import data from excel to SQL Server using map.
        /// </summary>
        /// <param name="filename"></param>
        public static void ImportDataFromExcelToSQLUsingMap(string filename)
        {
            // Load Excel data into DataTable
            string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;
            Data Source=" + filename + ";Extended Properties='Excel 12.0;HDR=YES;'";

           using(  OleDbConnection excelConnection = new OleDbConnection(connectionString))
           {
                string strSQL = "SELECT * FROM [WL_ProductDetail$]";
                OleDbCommand dbCommand = new OleDbCommand(strSQL, excelConnection);

                excelConnection.Open(); // This code will open excel file.
                OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);

                // create data table
                DataTable dTable = new DataTable();
                //fill table with echel data
                dataAdapter.Fill(dTable);

                // step 2 
                // string serverConnectionString = "Data Source=DELL390-2;Initial Catalog=TestData;Persist Security Info=True;User ID=sa;Password=427427";
                string serverConnectionString = ConfigurationManager.ConnectionStrings["WL_DemoConn"].ConnectionString;

                using (SqlConnection destinationConnection =
                       new SqlConnection(serverConnectionString))
                {
                    destinationConnection.Open();

                    SqlBulkCopyColumnMapping mapping1 = new SqlBulkCopyColumnMapping("RefNo", "RefNo");
                    SqlBulkCopyColumnMapping mapping2 = new SqlBulkCopyColumnMapping("FOR CHINA REPAIR CENTER", "OriginCountry");
                    SqlBulkCopyColumnMapping mapping3 = new SqlBulkCopyColumnMapping("品名", "品名");
                    SqlBulkCopyColumnMapping mapping4 = new SqlBulkCopyColumnMapping("商品名称", "商品名称");
                    SqlBulkCopyColumnMapping mapping5 = new SqlBulkCopyColumnMapping("原产国", "原产国");
                    SqlBulkCopyColumnMapping mapping6 = new SqlBulkCopyColumnMapping("数量", "数量");
                    SqlBulkCopyColumnMapping mapping7 = new SqlBulkCopyColumnMapping("单价", "单价");
                    SqlBulkCopyColumnMapping mapping8 = new SqlBulkCopyColumnMapping("净重", "净重");

                    SqlBulkCopyColumnMapping mapping9 = new SqlBulkCopyColumnMapping("总价CNY", "总价CNY");
                    SqlBulkCopyColumnMapping mapping10 = new SqlBulkCopyColumnMapping("HS", "HS");
                    SqlBulkCopyColumnMapping mapping11 = new SqlBulkCopyColumnMapping("品名2", "品名2");


                    using (SqlBulkCopy bulkCopy =
                            new SqlBulkCopy(destinationConnection))
                    {
                        //Destination Table must match columns in Excel sheet
                        string tableName = "WL_ProductDetail";
                        bulkCopy.DestinationTableName = tableName;

                        #region  Test bulkCopy eventhandler

                        bulkCopy.BatchSize = 100;
                        bulkCopy.BulkCopyTimeout = 5;

                        #endregion
                        bulkCopy.ColumnMappings.Add(mapping1);
                        bulkCopy.ColumnMappings.Add(mapping2);

                        bulkCopy.ColumnMappings.Add(mapping3);
                        bulkCopy.ColumnMappings.Add(mapping4);

                        bulkCopy.ColumnMappings.Add(mapping5);
                        bulkCopy.ColumnMappings.Add(mapping6);

                        bulkCopy.ColumnMappings.Add(mapping7);
                        bulkCopy.ColumnMappings.Add(mapping8);

                        bulkCopy.ColumnMappings.Add(mapping9);
                        bulkCopy.ColumnMappings.Add(mapping10);

                        bulkCopy.ColumnMappings.Add(mapping11);

                        bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
                        bulkCopy.NotifyAfter = 200;

                        try
                        {
                            // Write from the source to the destination.
                            bulkCopy.WriteToServer(dTable);

                        }
                        catch (Exception ex)
                        {
                            CommonDo.DoException.DealException(ex);
                        }
                        destinationConnection.Close();
                    }
                    excelConnection.Close();
                }
            }


        }

        #endregion

关键词:Visual Basic 2012;SQL server 2012;数据;传输;


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

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

 

1引言

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

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

在现代互联网信息爆炸的时代,信息不论在数量和内容上都会发生很快的更新,因此及时实现对信息的管理和更新非常重要,SQL
server数据库在数据的存储、管理和查询方面非常便捷,尤其提供了很大程度的安全性,然而SQL
server数据库在跨系统的数据交换仍存在一定的不便。在数据的编程方面也不能喝Excel相比。Excel在文件处理、保存、传送、交换数据方面非常便利,却在数据的集中管理和查询方面也不方便。本文主要研究了使用Visual实现Excel和SQL
server数据之间的数据交换在信息管理系统的应用,包括将SQL
server数据导入到Excel中,同时可以直接在Visual Basic
2012的可视化界面上对数据进行修改、删除和添加等编辑动作。

座右铭:一招鲜,吃遍天。——爱默生

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

2.SQL server数据导入到Excel的实现

具体的操作步骤:

具体的操作步骤:

数据的导出主要是将SQL server
2012版本的数据库Books.mdf中的Authors表中的数据导出到Excel
2010文件的Sample
Worksheet工作簿中,这样可以方便数据库的使用者下载自己需要的信息。主要的思路是将数据存入到一个新建的Excel中,然后存储起来以便使用。

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

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

2.1使用Visual Basic控件

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

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

在本案例中DataGridView数据库控件是实现Visual Basic 2012和SQL
server2012数据库之间桥梁,通过它可以将数据库中的数据读取出来,然后在DataGridView数据库控件中显示出来。DataGridView控件就是以DataSet连接的数据库为数据源,在界面上可以对应的显示出来。

威尼斯网址开户网站,第三步:设置窗体和控件属性。

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

2.2 Visual Basic 2012中的控件DataGridView上显示 SQL Server
2012数据

窗体或控件

窗体或控件

2.2.1在Visual Basic 2012中创建SQL server To Excel项目。打开 Visual
studio 2012,“开始”——“所有程序”——“ Microsoft Visual Studio 2012”——
Visual studio 2012——“文件”——“新建项目”——“visual basic”——“Windows
窗体应用程序”,在“名称”里输入“SQL server 2012 数据库导入到Excel
2010”,记下位置路径,准备后面使用“c:\users\administrator\documents\visual
studio 2012\Projects”如图:

属性名称

属性名称

威尼斯网址开户网站 1

属性值

属性值

建成项目后,需添加必须的引用,添加“项目”——“添加引用”——“框架”——“扩展”——“Microsoft.Office.Interop.Excel
”、“Microsoft.Office.tools.Excel”、“office”、“ADODB”。打开项目所在的目录“c:\users\administrator\documents\visual
studio 2012\Projects”——“SQL server 2012 数据库导入到Excel 2010”——“SQL
server 2012 数据库导入到Excel
2010”——“bin”——“debug”,将所建的数据库“Books.mdf”和“Books_log.ldf”复制到这里,这样可以实现在没有安装SQL
server软件的另一台电脑上使用,决定了所编程软件的灵活性。由于操作数据库,所以要导入类,这样可以简化编写代码。在窗体代码顶部:输入代码

窗体form1

窗体form1

Imports System.DataImports System.Data.SqlClientImports Microsoft.OfficeImports Microsoft.Office.Interop.ExcelImports Microsoft.Office.Tools.ExcelImports Excel = Microsoft.Office.Interop.Excel

Text

Text

2.2.2
在窗体上添加一个DataGridView控件和一个Button控件(Text属性值为“导出到Excel
2010
文件”),在窗体类中定义连接字符串SqlConnection、Sqlcommand对象、SqlDataset对象、DataSet对象。输入代码:

Excel 2010数据导入SQL Server 2012

Excel 2010数据导入SQL Server 2012

Dim objconnection As SqlConnection = New SqlConnection("Data Source=\v11.0;AttachDbFilename=" & My.Application.Info.DirectoryPath & "\books.mdf;Persist Security Info = False")Dim objCommand As SqlCommand = New SqlCommand()Dim objDataAdapter As New SqlDataAdapter()Dim objDataSet As New DataSet()

Button1

Button1

提示:My.Application.Info.DirectoryPath指的就是所保存的项目文件中bin文件夹下的debug文件夹路径。

Text

Text

2.2.3在窗体加载事件(Form1_Load)中添加代码。

Excel数据导入DataGridView

Excel数据导入DataGridView

代码如下:

excelToDataGridView_Button

(Name)

  objDataAdapter.SelectCommand = New SqlCommand()  objDataAdapter.SelectCommand.Connection = objconnection         objDataAdapter.SelectCommand.CommandText = "SELECT AuthorID,FirstName,LastName FROM Authors"         objDataAdapter.SelectCommand.CommandType = CommandType.Text  objconnection.Open()  objDataAdapter.Fill(objDataSet, "Authors")  objconnection.Close()  DataGridView1.AutoGenerateColumns = True  DataGridView1.DataSource = objDataSet  DataGridView1.DataMember = "Authors"  objDataAdapter = Nothing  objconnection = Nothing

Button2

excelToDataGridView_Button

2.2.4本程序至此已全完成,进行运行测试。点击“运行”按钮,运行结果如图;单击“导出到Excel
2010文件”按钮,运行结果如图:

Text

Button2

威尼斯网址开户网站 2

DataGridView导入到SQL server

Text

威尼斯网址开户网站 3

dataGridViewtoSQLserver_Button

DataGridView导入到SQL server

3结语

DataGridView1

(Name)

本文中所用到的数据库books.mdf是“Visual Basic 2012 How to
Program”一书中的源代码中的文件。非常感谢这本书的作者Deital。笔者认为理的“魂”——简短,尽可能地删去了解释方面的语句。其实通过代码在DataGridView控件和Excel的界面可以做更改以致看起来更好。以后会再写一篇“Excel
2010 文件导入到SQL server 2012数据库”的文章,相互对应。

默认

dataGridViewtoSQLserver_Button

附:完整代码

默认

DataGridView1

 1 Imports System.Data 2 Imports System.Data.SqlClient 3 Imports Microsoft.Office 4 Imports Microsoft.Office.Interop.Excel 5 Imports Microsoft.Office.Tools.Excel 6 Imports Excel = Microsoft.Office.Interop.Excel 7  8 Public Class Form1 9     Dim objconnection As SqlConnection = New SqlConnection("Data Source=\v11.0;AttachDbFilename=" & My.Application.Info.DirectoryPath & "\books.mdf;Persist Security Info = False")10     Dim objCommand As SqlCommand = New SqlCommand()11     Dim objDataAdapter As New SqlDataAdapter()12     Dim objDataSet As New DataSet()13 14     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load15         objDataAdapter.SelectCommand = New SqlCommand()16         objDataAdapter.SelectCommand.Connection = objconnection17         objDataAdapter.SelectCommand.CommandText = "SELECT AuthorID,FirstName,LastName FROM Authors"18         objDataAdapter.SelectCommand.CommandType = CommandType.Text19         objconnection.Open()20         objDataAdapter.Fill(objDataSet, "Authors")21         objconnection.Close()22         DataGridView1.AutoGenerateColumns = True23         DataGridView1.DataSource = objDataSet24         DataGridView1.DataMember = "Authors"25         objDataAdapter = Nothing26         objconnection = Nothing27 28     End Sub29 30     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click31         Dim xlApp As Microsoft.Office.Interop.Excel.Application32         Dim xlBook As Microsoft.Office.Interop.Excel.Workbook33         Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet34         xlApp = New Microsoft.Office.Interop.Excel.Application35         xlApp.Visible = True36         xlBook = xlApp.Workbooks.Add()37         xlSheet = CType(xlBook.Sheets.Add(), Excel.Worksheet)38         xlSheet.Name = "Sample Worksheet"39         xlApp.DisplayAlerts = False40 41         With xlSheet42             .Range("a1").CurrentRegion.Clear()43             For i = 1 To DataGridView1.Columns.Count 'i 为列44                 .Cells(1, i) = DataGridView1.Columns(i - 1).HeaderText45                 For j = 0 To DataGridView1.Rows.Count - 1  'j 为行46                     .Cells(j + 2, i) = DataGridView1.Item(i - 1, j).Value47                 Next j48             Next i49         End With50 51     End Sub52 End Class

第四步:编写代码:

默认

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按钮的单击事件(绿色字是注释,不会被编译

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

  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           '打开数据库           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按钮的单击事件(绿色字是注释,不会被编译

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名称空间
 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=\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 = 0 To j - 1  'j 为行  DataGridView1的数据坐标以开始              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(1, i).Value)              objCommand.Parameters.AddWithValue("@LastName", DataGridView1.Item(2, 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 & "条数据", "导入提示") '因为要除去标题,所以必须在所有行的基础上减1,即j-1才表示实际导入的行数      End Sub

 

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

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

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

         

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

  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

test.xlsx文件的内容:

 

威尼斯网址开户网站 4

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

Books.mdf数据库Authors表的内容

      

威尼斯网址开户网站 5

 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 = 0 To j - 1  '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(1, i).Value)

              objCommand.Parameters.AddWithValue("@LastName", DataGridView1.Item(2, 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 & "条数据", "导入提示") '因为要除去标题,所以必须在所有行的基础上减1,即j-1才表示实际导入的行数

      End Sub

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

 

威尼斯网址开户网站 6

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

第五步:运行程序。

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

A:未运行图

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

威尼斯网址开户网站 7

test.xlsx文件的内容:                      

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

 威尼斯网址开户网站 4 

威尼斯网址开户网站 9

 

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

Books.mdf数据库Authors表的内容

威尼斯网址开户网站 10

 威尼斯网址开户网站 5

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

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

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

        威尼斯网址开户网站 6

在第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        '打开数据库        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=\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 = 0 To j - 1  'j 为行  DataGridView1的数据坐标以开始            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(1, i).Value)            objCommand.Parameters.AddWithValue("@LastName", DataGridView1.Item(2, 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 & "条数据", "导入提示") '因为要除去标题,所以必须在所有行的基础上减1,即j-1才表示实际导入的行数    End SubEnd Class

              A:未运行图

               威尼斯网址开户网站 7

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

               威尼斯网址开户网站 9

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

                威尼斯网址开户网站 10

             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 = 0 To j - 1  '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(1, i).Value)
            objCommand.Parameters.AddWithValue("@LastName", DataGridView1.Item(2, 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 & "条数据", "导入提示") '因为要除去标题,所以必须在所有行的基础上减1,即j-1才表示实际导入的行数
    End Sub
End Class

 

相关文章