2017-03-29 58 views
0

你好夥計我遇到了一個我建立的項目的問題 我試圖使用批量導入將excel文件導入到sql server 2016,並且我得到了這個錯誤visual basic 2010,使用批量複製將excel文件導入到我的SQL

「‘DAFTAR1 $’不是一個有效的名稱。請確保它不包括無效字符或標點,它不是太長」

我認爲有這個代碼 昏暗query_excel作爲一個問題String =「SELECT * from [」& file &「$]」

我試過所有這些代碼在另一臺電腦上,它完美的工作,但在我的電腦上它出現了這個錯誤,我不知道我錯了什麼,我使用Visual Basic 2010專業版,SQL管理服務器2016和Microsoft Office 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 
+0

檢查您嘗試導入的工作表的名稱。我的猜測是,它只是被稱爲「Daftar1」,而不是「Daftar1 $」 – David

+0

嘿大衛謝謝你的建議,我試圖不放$,但它仍然給我同樣的錯誤,我不知道這裏有什麼問題代碼「Select * From [」&File&「$]」 我嘗試了所有在另一臺電腦上編寫的代碼,並且工作完美,所以我不知道該怎麼辦 – NickWilliams

+0

是否總是隻有一個工作表Excel文件?或者可能是2,但一個名爲「Sheet1 $」的空白單元? – David

回答

0

如果您使用的是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工作表並使用您已經用於導入的內容。

+0

不我不使用datagridview,我會給它拍攝大衛 非常感謝你我真的很感謝你做了什麼 我會讓你知道它是否有效 – NickWilliams

+0

嘿大衛,我試過你的代碼,它的工作原理罰款只是爲了顯示在datagrid文件,但我仍然遇到這個錯誤,當我嘗試上傳它。 「Microsoft Office Access數據庫引擎找不到對象'C:\ Users \ WilliamNick \ Desktop \ DAFTAR1.xlsx'。確保對象存在,並且正確拼寫其名稱和路徑名。」 它是如此奇怪,代碼只是工作完美,但仍然得到相同的錯誤 – NickWilliams

+0

我認爲問題是圍繞此代碼 昏暗koneksi_excel作爲新的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。打開() 昏暗query_excel作爲字符串= 「SELECT *從[文件]」 昏暗CMD作爲OleDb.OleDbCommand =新OleDb.OleDbCommand(query_excel,koneksi_excel) 昏暗RD作爲OleDb.OleDbDataReader RD = cmd.ExecuteReader( ) – NickWilliams

相關問題