если таблица базы данных существует, удалите ее и создайте новую с настраиваемыми полями - PullRequest
0 голосов
/ 26 мая 2020

шаг за шагом я пытаюсь написать свою программу VBA. net

есть одно краткое описание того, как работает программа, пользователь выбирает одну папку с некоторыми файлами с товарным запасом из инвентаря (обычно он может найти 3 файла, по одному для каждого за последние 3 года, но возможно, что файл года был 2). файл xls имеет 4 столбца (код статьи, описание, количество, общая стоимость)

  • В VBA я добавляю один лист и копирую содержимое каждого файла в этот новый лист, начиная со столбца 2 (" B ") в 1-м столбце (" A ") я пишу соответствующий год.
  • In. net Я уже написал код для импорта каждого файла, в этом случае у меня одна база данных mdf и одна Speci c table.

то во втором случае у меня одна таблица с 5 полями year, codart, descr, amount, value.

итак:

  • в VBA я считаю DISTINCT год, а с ADODB я создаю один динамический c по запросу, я использую codart, descr как строки таблицы и весь год, найденный как столбцы (количество + год, значение + год), тогда это результат: enter image description here
  • В. net Я умею считать количество импортированных лет, поэтому мне нужна таблица с необходимыми полями. Я искал в Google, спрашивал здесь и везде о том, как это сделать, но каждый пример, который я нахожу, - это то, как добавить одну таблицу mdf из Visual Studio (Sql обозреватель объектов сервера), но мне нужно программно создать эту новую таблицу по коду *. 1021 *

может кто-нибудь посоветовать мне это сделать?

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Я нашел, как добавить одну таблицу в собственную базу данных.

Private Sub Add_table()
   Dim qry As String = "CREATE TABLE [dbo].[tb_db] " &
                    "([CODPRO] NVARCHAR (50) Not NULL, [DESPRO] NVARCHAR (90) NOT NULL," &
                    "[2017quantity] FLOAT(53) NOT NULL, [2017value] FLOAT(53) NOT NULL, " &
                    "[2018quantity] FLOAT(53) NOT NULL, [2018value] FLOAT(53) NOT NULL, " &
                    "[2019quantity] FLOAT(53) NOT NULL, [2019value] FLOAT(53) NOT NULL)"

        Using con As SqlConnection = New SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;")
            con.Open()
        Using cmd As SqlCommand = New SqlCommand(qry, con)
            Try
                cmd.ExecuteNonQuery()
            Catch ex As Exception
                MessageBox.Show(ex.ToString())
            End Try
        End Using
        con.Close()
    End Using
End Sub

Затем я добавляю некоторую проверку (если таблица существует, ...)

0 голосов
/ 02 июня 2020

Возьмем для примера таблицу test в LocalDatabase:

enter image description here

Результат:

enter image description here

Вы можете попробовать мой код следующим образом:

Imports System.Data.SqlClient

Public Class Form1
    Public constr As String = "Data Source = (localdb)\MSSQLLocalDB; Integrated Security = True ;AttachDbFileName= D:\Database\Local Database\julietest0602.mdf"
    Public conn As SqlConnection
    Public sda As SqlDataAdapter
    Public cmd As SqlCommand
    Public dt As New DataTable
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Using conn = New SqlConnection(constr)
            conn.Open()
            cmd = New SqlCommand("IF EXISTS(Select * From sysobjects Where Name='test') drop table test", conn)
            cmd.ExecuteNonQuery()
            MsgBox("Delete OK!")


            cmd = New SqlCommand("CREATE TABLE test
                    ([CODPRO] NVARCHAR (50) Not NULL, [DESPRO] NVARCHAR (90) NOT NULL,
                    [2017quantity] FLOAT(53) NOT NULL, [2017value] FLOAT(53) NOT NULL, 
                    [2018quantity] FLOAT(53) NOT NULL, [2018value] FLOAT(53) NOT NULL, 
                    [2019quantity] FLOAT(53) NOT NULL, [2019value] FLOAT(53) NOT NULL)", conn)
            cmd.ExecuteNonQuery()
            MsgBox("Create OK!")

            cmd = New SqlCommand("Select * from test ", conn)
            sda = New SqlDataAdapter(cmd)
            Dim dt1 As New DataTable
            sda.Fill(dt1)
            DataGridView1.DataSource = dt1

        End Using
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Using conn = New SqlConnection(constr)
            conn.Open()
            cmd = New SqlCommand("Select * from test ", conn)
            sda = New SqlDataAdapter(cmd)
            Dim dt1 As New DataTable
            sda.Fill(dt1)
            DataGridView1.DataSource = dt1

        End Using
    End Sub
End Class
...