当前位置: 代码迷 >> VB Dotnet >> VB.NET中請問誰有從Excel導入到數據庫的代碼?解决方法
  详细解决方案

VB.NET中請問誰有從Excel導入到數據庫的代碼?解决方法

热度:91   发布时间:2016-04-25 02:09:21.0
VB.NET中請問誰有從Excel導入到數據庫的代碼?
VB.NET中請問誰有從Excel導入到數據庫的代碼(帶注釋的)?急求!
------解决思路----------------------
具体实现很简单,根据选择的Sheet读取到里面的数值,然后插入到临时表,进行数据验证后,在插入到数据库的正式标表中;

'引入命名空间
Imports System.Data
Imports System.Data.OleDb

    Public Function Query(ByVal ExcelFilePath As String, ByVal Sql As String) As DataSet
        Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFilePath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"
        Using connection As New OleDbConnection(ConnectionString)
            Dim ds As New DataSet
            Try
                connection.Open()
                Dim command As OleDbDataAdapter = New OleDbDataAdapter(Sql, connection)
                command.Fill(ds, "ds")
            Catch ex As System.Data.OleDb.OleDbException
                Throw New Exception(ex.Message)
            End Try
            Return ds
        End Using
Private Sub ImportData()
        '1.创建个临时表 tempTable2
        Dim tempTable As String = "MemberFileinfo"
        Dim sql As String
        sql = "create table " & tempTable
        sql &= "([HeadName] nvarchar(10),[Sex] nvarchar(2))"
        '执行SQL语句

        '2.读取Excel里面的Sheet数据到dt里面
        Dim excelSheet As String = "Sheet1$"
        Dim dt As DataTable
        Try
            dt = OleHelper.Query("select * from [" + excelSheet + "]").Tables(0)
        Catch ex As Exception
            MsgBox(ex.Message)
            Exit Sub
        End Try
        Dim i As Integer = 0
        Dim sql As String = ""

        '例如:Excel里面有2个字段:姓名,性别
        Dim HeadName As String  '姓名
        Dim Sex As String '性别
        For Each row As DataRow In dt.Rows
            HeadName = row(0)
            Sex = row(1)

            If i = 0 Then
                If HeadName <> "姓名" Then
                    MsgBox("A列不是姓名")

                    Exit Sub
                End If
                If Sex <> "性别" Then
                    MsgBox("B列不是性别")

                    Exit Sub
                End If
            Else
                Try
                    sql = "INSERT INTO " & tempTable & " "
                    sql &= " ([HeadName],[Sex])"
                    sql &= "  VALUES("
                    sql &= "'" & HeadName & "','" & Sex & "'"
                    sql &= ")"
                    '执行下sql插入语句

                Catch ex As Exception

                    MsgBox("导入数据失败,存储在临时表:" + tempTable)
                    Exit Sub
                End Try
            End If
            i += 1
        Next

        Try
            '从临时表插入到正式表
            Dim strsql As String
            strsql = "insert into B_memberfileinfo select * from " & tempTable

            '执行strSal语句
            Msbox.Show("数据导入成功!" + Me.ComboBox1.Text)
        Catch ex As Exception
            Dim errInfo As String = ex.ToString
            My.Computer.FileSystem.WriteAllText(Common.GetPath("ErrInfo.txt"), "导入数据异常信息:" + vbCrLf + errInfo, False)
            Msbox.Show("导入数据异常信息!")
        End Try
    End Sub

供LZ参考!!


------解决思路----------------------
上述代码这句应该传入2个参数

      Dim excelSheet As String = "Sheet1$"
        Dim dt As DataTable
        Try
            dt = OleHelper.Query("取得Excel文件的路径","select * from [" + excelSheet + "]").Tables(0)
        Catch ex As Exception
            MsgBox(ex.Message)
            Exit Sub
        End Try

------解决思路----------------------
楼主你好懒啊,只会复制粘贴不会改吗。等你用的时候会有更多的细节问题,而不是用不用临时表的问题。
------解决思路----------------------
只要像爱女人一样爱VB.NET 都能得到进步,只是进步慢。
------解决思路----------------------
引用:
不用臨時表也可以實現的

是的,也可以实现的!但是,对于一些金额值导入的话,最好中间建立个临时表,进行非法数据检查过滤!
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

不用臨時表也可以實現的

是的,也可以实现的!但是,对于一些金额值导入的话,最好中间建立个临时表,进行非法数据检查过滤!

OleHelpe是什么?而且發現代码傳入參數有問題,無法執行。

OleHelpe类的名字,你这块直接可以Query(....).
  相关解决方案