如何使用vb.net在MS Access dbase中添加缺少的列并忽略现有的列?

问题描述 投票:0回答:1

方案是这样。我有一个现有的ms访问数据库。数据库内部有Table1。假设我不知道已有哪些列或现有列。我的程序使用vb.net形式,只需单击一下按钮,我就可以添加所有列,例如姓名,薪水,地址,daterec和更新。在那里添加所有这些列没有问题,因为它们在表1中不存在。我的问题是在某些数据库Table1中,某些列/字段已经存在,例如薪水和地址,我想添加列名称,daterec并更新,但它给我一个错误“字段'名称'已在表'Table1'中存在。我该怎么办?我只想添加Table1中尚不存在的那些列。我想忽略那些现有的列,然后继续添加那些缺少的列。任何建议都非常感谢。

下面是可以添加列并进行修改的代码。谢谢。

Dim ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|addcolumn.accdb"


    Dim SqlString As String = "ALTER TABLE Table1 ADD COLUMN " + "name Text(250)," + "salary Number," + "address Memo," + "daterec DateTime," + "updated YesNo" 'Datatypes: Text is ShortText, Number is Number(Double), Memo is LongText, DateTime is Date or/and Time, YesNo is either checkbox/True or False/On or Off depends in saving format .
    Using conn As New OleDbConnection(ConnString)
        Using cmd As New OleDbCommand(SqlString, conn)
            conn.Open()
            cmd.ExecuteNonQuery()
        End Using
    End Using
database vb.net ms-access visual-studio-2012
1个回答
0
投票

这里的挑战是您注意到的吗?有些字段可能存在,有些可能不存在。因此,您必须测试并逐个字段添加]

类似这样的方法应该起作用:

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click

    Dim strCon As String
    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test\test44.accdb"

    Using dbCon As New OleDbConnection(strCon)
        dbCon.Open()
        AddFieldExist("table1", "name", "Text(250)", dbCon)
        AddFieldExist("table1", "Salary", "number", dbCon)
        AddFieldExist("table1", "Address", "memo", dbCon)
        AddFieldExist("table1", "Address", "memo", dbCon)
        AddFieldExist("table1", "DateRec", "datetime", dbCon)
        AddFieldExist("table1", "Upated", "YesNo", dbCon)

    End Using

End Sub

Sub AddFieldExist(strTable As String,
                    strField As String,
                    strType As String,
                    dbCon As OleDb.OleDbConnection)

    ' return true/false if field exist.

    Dim tblDef As New DataTable
    Dim oReader As New OleDbDataAdapter("SELECT TOP 1 * FROM " & strTable, dbCon)
    oReader.Fill(tblDef)

    If tblDef.Columns.IndexOf(strField) = -1 Then
        ' add field
        Dim strSQL As String = "ALTER TABLE " & strTable & " ADD COLUMN " & strField & " " & strType
        Dim cmd As New OleDbCommand(strSQL, dbCon)
        cmd.ExecuteNonQuery()
    End If

End Sub

代码确实假定所讨论的表确实具有数据。如果不是这样,那么您可能必须在这里引入getSchema,但是就目前而言,以上内容是我所建议的。

© www.soinside.com 2019 - 2024. All rights reserved.