Как мне экспортировать таблицу SQL на основе сервиса из приложения Windows Form в Excel?

#vb.net

#vb.net

Вопрос:

Я создаю приложение для имитации построения реального приложения, а не просто небольших примеров. Приложение имеет основную форму и 3 другие формы Windows для заказов, продаж и продуктов, у меня также есть одна база данных SQL на основе сервиса, которая является локальной и доступна только для приложений, эта база данных на основе сервиса содержит 3 таблицы, по одной для каждой формы. Все они хороши, работают нормально, и приложение сохраняет данные, которые я помещаю в него при запуске приложения из папки debug, но теперь мне нужно вести записи этих таблиц отдельно на листе Excel, и я понятия не имею, как это сделать.

Я узнал все, что мне нужно для создания этого приложения, из видео ниже, и я улучшаю его, насколько могу, возможно, если я недостаточно ясно выразился, это может помочь придать некоторый контекст. https://www.youtube.com/watch?v=NLs44hxV514

И вот как выглядит мое приложениеhttps://imgur.com/a/ElS6V6v

Попробовал несколько примеров, которые я нашел в Интернете, но ни один из них не сработал, большинство из них были направлены на реальные серверы SQL, а не на сервисные.

Я знаю, что это совсем не полезно, но это то, что у меня пока есть на моей кнопке экспорта.

     Try
        sfdProdutos.InitialDirectory = "c:"
        sfdProdutos.Title = "Save your file."
        sfdProdutos.ShowDialog()

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
  

И ни капли идеи о том, как это закончить, лол.
На данный момент я пытаюсь просто сохранить ее в существующий файл Excel, потому что я знаю, что будет что-то, что усложнит мою жизнь, если я попробую все сразу, отложите это на другой день.

Чтобы вы могли понять, как я до сих пор работал с базой данных в приложении, это моя кнопка «Сохранить запись» для одной из форм

     If ProductTextBox.Text = Nothing Then
        ProductTextBox.Text = "unknown"
    End If
    If ProviderTextBox.Text = Nothing Then
        ProviderTextBox.Text = "unknown"
    End If
    If PriceTextBox.Text = Nothing Then
        PriceTextBox.Text = "unknown"
    End If
    If Bar_CodeTextBox.Text = Nothing Then
        Bar_CodeTextBox.Text = "unknown"
    End If
    Try
        Me.Validate()
        Me.ProductsTableBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.ProdutosDataSet)
        MessageBox.Show("The product has been edited.", "Information.", MessageBoxButtons.OK)
        ProductTextBox.Select()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
  

Любая помощь очень ценится!
Заранее спасибо, что прочитали все это.

Ответ №1:

Я бы использовал datatable и заполнил его из таблицы sql, после чего вы можете легко экспортировать эти данные в Excel

 Dim strSql As String = "SELECT EmpCode,EmpID,EmpName FROM dbo.Employee"
Dim dtb As New DataTable
    Using cnn As New SqlConnection(connectionString)
      cnn.Open()
          Using dt As New SqlDataAdapter(strSql, cnn)
              Dt.Fill(dtb)
          End Using
        cnn.Close()
    End Using
  

Используйте это для экспорта в Excel

используйте это для заполнения Данные, доступные с помощью вашего SqlDataAdapter

 
    Dim constring As String = "Data Source=.SQL2005;Initial Catalog=Northwind;User id = sa;password=pass@123"
        Using con As New SqlConnection(constring)
            Using cmd As New SqlCommand("SELECT * FROM Customers", con)
                cmd.CommandType = CommandType.Text
                Using sda As New SqlDataAdapter(cmd)
                    Using dt As New DataTable()
                        sda.Fill(dt)
                        dataGridView1.DataSource = dt
                    End Using
                End Using
            End Using
        End Using

  

Комментарии:

1. Да, я узнал об этом, но это заставило бы меня снова запускать приложение практически с нуля, а поскольку у меня пока нет знаний для создания системы предотвращения sql-инъекций, я предпочитаю использовать автономное приложение только с базой данных, подключенной к его EXE-файлу, чем сервер. Должен быть способ работать с этой базой данных на основе сервиса, верно? В противном случае, какой в этом смысл?