Sql server 若数据库表存在,则删除它,并使用自定义字段创建一个新表

Sql server 若数据库表存在,则删除它,并使用自定义字段创建一个新表,sql-server,vb.net,visual-studio,Sql Server,Vb.net,Visual Studio,我一步一步地尝试在.net中编写VBA程序 有一个简短的程序运行说明, 用户选择一个文件夹,其中包含一些库存货物的文件(通常他可以找到3个文件,过去3年中每个文件一个,但年份文件可能是2个)。 xls文件有4列(物品代码、说明、数量、总值) 在VBA中,我添加一张图纸,并将每个文件的内容复制到 此新表格从第1列(“A”)I中的第2列(“B”)开始 写出相应的年份 在.net中,我已经编写了导入每个文件的代码,在本例中,我有一个mdf数据库和一个特定的表 在第二种情况下,我有一个表,有5个字段

我一步一步地尝试在.net中编写VBA程序

有一个简短的程序运行说明, 用户选择一个文件夹,其中包含一些库存货物的文件(通常他可以找到3个文件,过去3年中每个文件一个,但年份文件可能是2个)。 xls文件有4列(物品代码、说明、数量、总值)

  • 在VBA中,我添加一张图纸,并将每个文件的内容复制到 此新表格从第1列(“A”)I中的第2列(“B”)开始 写出相应的年份
  • 在.net中,我已经编写了导入每个文件的代码,在本例中,我有一个mdf数据库和一个特定的表
在第二种情况下,我有一个表,有5个字段year,codart,descr,quantity,value

因此:

  • 在VBA中,我计算不同的年份,并使用ADODB创建一个动态跨查询,我使用codart、descr作为表行,使用alla year作为列(数量+年、价值+年),然后这是结果:
  • 在.net中,我知道如何计算导入的年数,所以我需要一个包含必要字段的表。我在谷歌上搜索,到处询问如何做,但我找到的每个示例都是如何从Visual Studio(Sql Server对象资源管理器)添加一个mdf表,但我需要通过编程方式通过代码来创建这个新表

有人能指导我做这件事吗

我找到了如何向self数据库添加一个表

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

然后我添加一些检查(如果表存在,…)

LocalDatabase
中的表
test
为例:

结果是:

您可以按如下方式尝试我的代码:

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

也许你需要改写一下你的问题,我已经读了好几遍了,我仍然不确定你想要达到什么目的。是在运行时在数据库中创建表,还是来自数据库的查询为您提供了一个结果集?VBA与任何事情都有什么关系?如果您试图在vba中执行此操作,则可能需要将其添加到您的系统中tags@Hursey我的VBA程序运行正常,我希望将其转换为.net,但并不总是那么容易。但是,在这种情况下就像“当你拼命寻找眼镜,但这些是在你的头上”:我补充我的解决方案,任何建议都是欢迎的