【问题标题】:visual basic 2010, Importing excel files to my SQL using bulkcopyvisual basic 2010,使用批量复制将 excel 文件导入我的 SQL
【发布时间】:2017-03-29 09:08:59
【问题描述】:

大家好,我在构建的项目中遇到问题 我正在尝试使用批量复制将 excel 文件导入 sql server 2016,但出现此错误

“'DAFTAR1$' 不是一个有效的名称。确保它不包含无效字符或标点符号,并且它不是太长”

我认为这段代码有问题 Dim query_excel As String = "SELECT * from [" & file & "$]"

我在另一台电脑上尝试了所有这些代码,它运行良好,但在我的电脑上出现了这个错误,我不知道我做错了什么,我使用的是 Visual Basic 2010 专业版,SQL 管理服务器 2016 和微软办公室 2016

谁能帮我弄清楚代码有什么问题?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If OpenFileDialog1.ShowDialog = DialogResult.OK Then
        TextBox1.Text = OpenFileDialog1.FileName
        file = System.IO.Path.GetFileNameWithoutExtension(TextBox1.Text)

    End If

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    Dim koneksi_excel As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ace.OLEDB.12.0;Data Source='" & TextBox1.Text & "';Extended Properties=""Excel 12.0 Xml;HDR=YES;""")
    koneksi_excel.Open()

    Dim query_excel As String = "SELECT * from [" & file & "$]"
    Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(query_excel, koneksi_excel)
    Dim rd As OleDb.OleDbDataReader

    rd = cmd.ExecuteReader()

    Dim koneksi As New SqlClient.SqlConnection()
    Dim koneksidatabase As String = "server=DESKTOP-KJQ8PNO\SQLEXPRESS;database=otto;Integrated Security=True"
    koneksi.ConnectionString = koneksidatabase


    koneksi.Open()
    Dim da As New OleDb.OleDbDataAdapter
    Dim ds As New DataSet()
    Dim dt As New DataTable
    ds.Tables.Add(dt)
    da = New OleDb.OleDbDataAdapter(query_excel, koneksi_excel)
    da.Fill(dt)


    Using bulkcopy As SqlClient.SqlBulkCopy = New SqlClient.SqlBulkCopy(koneksi)
        bulkcopy.DestinationTableName = file
        bulkcopy.BulkCopyTimeout = 600
        bulkcopy.WriteToServer(rd)
        rd.Close()


        MsgBox("Data uploaded to database", MsgBoxStyle.Information, "Uploaded")
        TextBox1.Text = ""
    End Using
End Sub

【问题讨论】:

  • 检查您尝试导入的工作表的名称。我的猜测是它只是被称为“Daftar1”,而不是“Daftar1$”
  • 嘿大卫谢谢你的建议,我试着不放 $ 但它仍然给我同样的错误,我想知道这段代码有什么问题 " Select * From ["& File & "$]" 我在另一台电脑上写的所有代码都试过了,效果很好,所以我不知道该怎么做
  • Excel 文件中是否总是只有一个工作表?或者可能是 2 个,但是一个名为“Sheet1$”的空白?
  • 每个 excel 文件中只有一张表,所以我的意思是,我有几个 excel 文件需要上传到 sql server 数据库,我还在数据库中创建了这些表并将它们命名为和excel文件一样
  • 您是否使用DataGridView 或其他方式查看您正在导入的文件?

标签: vb.net


【解决方案1】:

如果您使用DataGridView 或其他一些网格来查看数据,这是您可以查看数据并将其加载到网格。

Using ofd As New OpenFileDialog
      ofd.InitialDirectory = dir
      ofd.Filter = "Excel Files (*.xlsx)|*.xlsx| XLS Files (*.xls)|*.xls"
      ofd.FilterIndex = 1

    If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
       txtFile.Text = ofd.FileName

       fi = New FileInfo(ofd.FileName)
       fileName = ofd.FileName

       excel = fi.FullName

       eCon = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
                                   excel & ";Extended Properties='Excel 12.0;IMEX=1;';")
       eCon.Open()

      Dim dtSheets As DataTable = eCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
      Dim listSheet As New List(Of String)
      Dim drSheet As DataRow

      For Each drSheet In dtSheets.Rows
           If drSheet.Item("TABLE_NAME").ToString() <> "Sheet1$" Then
              listSheet.Add(drSheet("TABLE_NAME").ToString())
          Else
          End If
      Next

     Me.Cursor = Cursors.WaitCursor

     Dim myTable = ""
     myTable = listSheet.Item(0)

     da = New OleDbDataAdapter(String.Format("SELECT * FROM [{0}]", myTable), eCon)
     ds = New DataSet
     da.Fill(ds, myTable)
     Dim dt As DataTable = ds.Tables(0).Copy()

从这里,将dt 设置为网格DataSource。这样您就知道您总是会得到第一个工作表,并且不必担心名称是什么,程序会为您获取它。

玩一玩让我知道。或者,您可以只使用此代码来获取 Excel 工作表并使用已有的内容进行导入。

【讨论】:

  • 不,我不使用 datagridview,我会给它拍摄大卫,非常感谢你,我真的很感激你所做的我会告诉你它是否有效
  • 嘿大卫,我试过你的代码,它只是在数据网格中显示文件工作正常,但当我尝试上传它时仍然出现此错误。 “Microsoft Office Access 数据库引擎找不到对象'C:\Users\WilliamNick\Desktop\DAFTAR1.xlsx'。确保该对象存在并且您正确拼写了它的名称和路径名。”太奇怪了,代码可以完美运行,但仍然出现同样的错误
  • 我认为问题在于这段代码 Dim koneksi_excel As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ace.OLEDB.12.0;Data Source='" & TextBox1.Text & " ';Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1""") koneksi_excel.Open() Dim query_excel As String = "SELECT * from [file]" Dim cmd As OleDb.OleDbCommand = New OleDb。 OleDbCommand(query_excel, koneksi_excel) Dim rd As OleDb.OleDbDataReader rd = cmd.ExecuteReader()
  • 所以使用OpenFileDialog。这样您就可以选择要使用的文件。只要连接字符串正确,就不会有任何问题。
  • 嘿,大卫,我发现了问题,非常感谢您的帮助,我真的很感激,谢谢哥们
猜你喜欢
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 2023-03-25
  • 2016-05-10
  • 2013-01-06
  • 2021-06-08
相关资源
最近更新 更多