Member 13052135 Ответов: 1

Импортировать файлы Excel к SQL через массовое копирование


привет ребята у меня возникли проблемы с проектом который я строю
Я пытаюсь импортировать файлы excel в sql server 2016 с помощью bulkcopy и получил эту ошибку

""DAFTAR1$" не является допустимым именем. Убедитесь, что он не содержит недопустимых символов или знаков препинания и что он не слишком длинный"

Я думаю, что есть проблема с этим кодом
Дим query_excel как String = "выбрать * из [" &амп; файл &усилителя; "$]"

я попробовал весь этот код на другом компьютере, и он отлично работает, но на моем компьютере он получает эту ошибку, я не знаю, что я сделал не так, я использую visual basic 2010 professional edition, sql management server 2016 и microsoft office 2016

кто-нибудь может помочь мне понять, что не так с кодом ?

Что я уже пробовал:

<pre>
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

1 Ответов

Рейтинг:
0

Patrice T

Dim query_excel As String = "SELECT * from [" & file & "$]"

Никогда не создавайте SQL-запрос путем конкатенации с пользовательскими вводами, он называется "SQL-инъекция", он опасен для вашей базы данных и подвержен ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользовательский ввод типа "Брайан О'Коннер" может привести к сбою вашего приложения, то это уязвимость SQL-инъекции.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
Цитата:
Я получил эту ошибку "'DAFTAR1$' не является допустимым именем.

А каково настоящее имя базы данных?
Вы уверены, что он существует в вашем компьютере?