EXCEL文件导入远程SQL SERVER数据库

41 篇文章 0 订阅

一、ASP.NET

1、将文件上传到服务器上

2、执行存贮过程EC_ExcelToSQL,注意文件路径为服务器上EXCEL所在的路径

二、winform下数据库在本机

1、获取EXCEL表名

 Try
            temp = GetExcelSheetNames(txtPath.Text)
            cboSheet.Items.Clear()
            For i = 0 To UBound(temp)
                cboSheet.Items.Add(temp(i))
            Next
            cboSheet.SelectedIndex = 0
        Catch ex As Exception


        End Try

  '获取EXCEL文件工作表名
    Public Function GetExcelSheetNames(ByVal excelFile As String) As String()
        Dim objConn As OleDbConnection = Nothing
        Dim dt As System.Data.DataTable = Nothing


        Try
            Dim connString As String


            If excelFile.EndsWith("xls") Or excelFile.EndsWith("XLS") Then
                connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & excelFile & "; Extended Properties='Excel 8.0;IMEX=1'"
            ElseIf excelFile.EndsWith("xlsx") Or excelFile.EndsWith("XLSX") Then
                connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & excelFile & ";Extended Properties=""Excel 12.0;HDR=YES"""
            Else
                connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & excelFile & "; Extended Properties='Excel 8.0;IMEX=1'"
            End If


            objConn = New OleDbConnection(connString)
            objConn.Open()
            dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)


            If dt Is Nothing Then
                Return Nothing
            End If


            Dim excelSheets As String() = New String(dt.Rows.Count - 1) {}
            Dim i As Integer = 0


            For Each row As DataRow In dt.Rows
                excelSheets(i) = row("TABLE_NAME").ToString()
                i += 1
            Next
            For j As Integer = 0 To excelSheets.Length - 1




            Next


            Return excelSheets
        Catch ex As Exception
            Return Nothing
        Finally
            ' Clean up. 
            If Not objConn Is Nothing Then
                objConn.Close()
                objConn.Dispose()
            End If
            If Not dt Is Nothing Then
                dt.Dispose()
            End If
        End Try
    End Function

2、如果SQL服务器在本机,则利用存贮过程可完成数据的导入,其中第一个参数为EXCEL表名,第2个参数为文件名。导入到TEMPDB下的MYTEST下

      strSql = "exec EC_ExcelToSQL '" & cboSheet.Text & "','" & txtPath.Text.Trim & "','" & cUserID & "'"
            if Not o.runSql(strSql) Then
                MsgBox("数据导入失败")
                Exit Sub
            End If


3、存贮过程EC_ExcelToSQL

create       PROCEDURE [EC_ExcelToSQL] 
@SheetName as nvarchar(50),
@ExcelPath as nvarchar(200),
@User as nvarchar(50)
AS 
BEGIN
   Declare @sql as nvarchar(800)
   Declare @str as nvarchar(80)
   if exists (select * from tempdb..sysobjects where name =N'mytest'+ @User and type='U')
    begin   
     set @sql=''
     set @sql='drop table tempdb..mytest' + @User
     exec(@sql)
    end
   set @str=LOWER(substring(@ExcelPath,charindex('.',@ExcelPath)+1,5))
   Set @sql=''
   if @str='xls'
   Set @sql='select * into tempdb..mytest' + @user + ' from OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.0;HDR=YES;DATABASE=' + @ExcelPath + ''',''select * from ['+ @SheetName + ']'')'
   else
   Set @sql='select * into tempdb..mytest' + @user + ' from OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;HDR=YES;DATABASE=' + @ExcelPath + ''',''select * from ['+ @SheetName + ']'')'


   exec(@sql)


END


三、WINFORM下数据库服务器在远程

1、解决思路

使用DataSet对象完成数据插入,datatable 的表结构必须与数据库中你要更新的表的结构一致。

(1) 创建一个Connection对象。

(2)创建一个DataAdapter对象。

(3) 初始化适配器。

(4)使用数据适配器的Fill方法执行SELECT命令,并填充DataSet

(5) 使用DataTable对象提供的NewRow方法创建新行。

(6)将数据行的字段设置为插入的值。

(7) 使用DataRowAdd类的Add方法将数据行添加到数据表中。

(8)DataAdapter类的InsertCommand属性设置成需要插入记录的INSERT语句。

(9) 使用数据适配器提供的Update方法将新记录插入数据库。

2、操作步骤,先导入临时表mytest001中其中001为用户ID,再根据需要对数据进行有效性校验,再进入正式的系统应用

   '删除临时数据mytest 该数据为原始的数据,EXCEL导入进来就不动了
            strSql = " if exists (select * from sysobjects where name =N'mytest" & cUserID & "' and type='U')  drop table mytest" & cUserID
            Try
                o.runSql(strSql)
            Catch ex As Exception

            End Try

            '定义EXCEK连接字符串 
            Dim excelsConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & txtPath.Text.Trim & "; Extended Properties=Excel 8.0;"
            Dim exceloleDbConnection As OleDbConnection = New OleDbConnection(excelsConnectionString)
            'SQL数据库连接 
            Dim sqlcon As SqlClient.SqlConnection = New SqlClient.SqlConnection("server=(local);database=test;user id=sa;password=123")


            Try
                exceloleDbConnection.Open()


                '获取excel表 
                Dim dataTable As DataTable = exceloleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)




                '利用SQL语句从Excel文件里获取数据 
                Dim exceltable As String = "SELECT * FROM [" & cboSheet.Text & "]"
                Dim exceldataset As DataSet = New DataSet
                Dim exceloleAdapter As OleDbDataAdapter = New OleDbDataAdapter(exceltable, excelsConnectionString)
                exceloleAdapter.Fill(exceldataset, "mytest" & cUserID)
                Dim exceldataRow As DataRow


                Try
                    '生成数据库
                    Dim i As Integer
                    Dim tempziduan As String  '字段名称
                    tempziduan = ""


                    exceldataRow = exceldataset.Tables("mytest" & cUserID).Rows(0)
                    For i = 0 To exceldataRow.Table.Columns.Count - 1


                        If tempziduan = "" Then
                            tempziduan = "[" & exceldataRow.Table.Columns(i).ToString() & "] [varchar](200)"
                        Else
                            tempziduan += ",[" & exceldataRow.Table.Columns(i).ToString() & "] [varchar](200)"
                        End If
                    Next
                    '根据EXCEL各字段名称在SQL中生成mytest
                    strSql = "CREATE TABLE mytest" & cUserID & " (" & tempziduan & ")"
                    o.runSql(strSql)


                Catch ex As Exception
                    MsgBox("生成数据库时发生错误", MsgBoxStyle.Information, "错误")
                    Exit Sub
                End Try


                sqlcon.Open()
                '从excel文件获得数据后,插入记录到SQL Server的数据表 
                Dim sqldatatable As DataTable = New DataTable
                Dim sqlDA As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter("SELECT * FROM mytest" & cUserID, sqlcon)




                Dim sqlCB As SqlClient.SqlCommandBuilder = New SqlClient.SqlCommandBuilder(sqlDA)
                sqlDA.Fill(sqldatatable)


                For Each exceldataRow In exceldataset.Tables("mytest" & cUserID).Rows
              
                    Dim sqldatarow As DataRow = sqldatatable.NewRow()
                    Dim inumziduan As Integer
                    For inumziduan = 0 To exceldataRow.Table.Columns.Count - 1
                        sqldatarow(inumziduan) = exceldataRow(inumziduan)
                    Next


                    '''sqldatarow("考试分数") = exceldataRow("考试分数")
                 
                    sqldatatable.Rows.Add(sqldatarow)
                Next
                MsgBox("共检测到临时数据 " & sqldatatable.Rows.Count.ToString() & " 条记录 ")
                sqlDA.Update(sqldatatable)
            Catch ex As Exception
                MsgBox(ex.ToString)
            Finally
                exceloleDbConnection.Close()
                sqlcon.Close()
            End Try

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值