Uma Kameswari Ответов: 1

Загрузка данных из файла Excel в таблицу SQL Server в vb.net win app


Привет,

Я хочу загрузить данные из файла excel в существующую таблицу SQL Server 2005.
Я попытался сделать это следующим образом, но это не обновление.

1. Чтение данных из Excel файла в набор данных.
2. считывание данных из таблицы Sql Server в набор данных.
3.объедините оба набора данных.
4. обновление с помощью адаптера данных.

Когда я пытаюсь назначить объединенный набор данных сетке, я не вижу изменений, но когда я вижу табличные данные, я не вижу обновлений.
информация о версии:
SQL Server 2005
Visual Studio 2005 .NET Framework 2.0

Ниже приведен код.

UploadForecastFile()

Private Sub UploadForecastFile()

       'read data from excel file
       ReadExcelFile()
       'read data from sql server table
       GetExistingForecast()
       'set composite primary key for the data table of sql server data
       dsForecast.Tables("Forecast").PrimaryKey = New DataColumn() {dsForecast.Tables(0).Columns("Customer"), dsForecast.Tables(0).Columns("Salesman"), dsForecast.Tables(0).Columns("Product"), dsForecast.Tables(0).Columns("Year")}
       dsExcelForecast.Tables(0).PrimaryKey = New DataColumn() {dsExcelForecast.Tables(0).Columns("Customer"), dsExcelForecast.Tables(0).Columns("Salesman"), dsExcelForecast.Tables(0).Columns("Product"), dsExcelForecast.Tables(0).Columns("Year")}
       'Merge excel data with sql server data
       dsFinal.Merge(dsForecast)
       dsFinal.AcceptChanges()
       dsFinal.Merge(dsExcelForecast)
       dsFinal.AcceptChanges()
       daMain.Update(dsFinal.Tables(0))
       daMain.AcceptChanges()
       MsgBox("Forecast updated")
       dgvModifiedForecast.DataSource = dsFinal

   End Sub
Private Sub ReadExcelFile()
        Dim strConnectionString As String
        Dim FileName As String
        FileName = txtFileName.Text
        strConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & FileName & ";" & "Extended Properties=Excel 12.0;"
        Dim conn As OleDbConnection = New OleDbConnection(strConnectionString)
        Dim da As OleDbDataAdapter = New OleDbDataAdapter()
        Dim cmd As OleDbCommand = New OleDbCommand()
        cmd.Connection = conn
        cmd.CommandText = "SELECT * FROM [Sheet1$]"
        da.SelectCommand = cmd
        Try
            da.Fill(dsExcelForecast, "sheet1")
            Me.dgvModifiedForecast.DataSource = dsExcelForecast
            Me.dgvModifiedForecast.DataMember = "sheet1"
        Catch e1 As Exception
            MessageBox.Show(e1.Message)
            MessageBox.Show("Import Failed, correct Column name in the sheet!")
        End Try
    End Sub

 Private Sub GetExistingForecast()
        Dim conn As New SqlConnection(connectionString)
        Dim cmd As New SqlCommand
        conn.Open()
        cmd.CommandText = "GetCompleteForecast"
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Connection = conn
        daMain = New SqlDataAdapter(cmd)
        daMain.Fill(dsForecast, "Forecast")
       

    End Sub

AndrewCharlz

используйте массовую вставку это была бы лучшая идея для выполнения такого рода операций

Uma Kameswari

Это требование руководства. Они не хотят зависеть от ИТ-отдела для загрузки. Им нужно было приложение, в котором они могли бы выбрать файл excel и по щелчку кнопки он должен был обновиться в базе данных. Это не одноразовая работа. Они регулярно вносят изменения в существующие данные в excel, а затем обновляют их в таблицу sql.

AndrewCharlz

sqlbulk встроен в dotnet ограничителя пожалуйста, проверьте, как использовать его в УР приложение

AndrewCharlz

вы можете использовать его как в интернете, так и в winform