Vb.net 用vb中的Adox在access数据库中创建表

Vb.net 用vb中的Adox在access数据库中创建表,vb.net,vba,ddl,adox,Vb.net,Vba,Ddl,Adox,我正在使用Visual Basic 2012中的Windows窗体应用程序使用.ADOX创建新的Microsoft Access数据库。我可以创建数据库,但不能在数据库中创建表 我的代码是: Imports ADOX Imports System.Data.OleDb Public Class Form1 Dim mycommand As OleDbCommand Dim myconnection As OleDbConnection Dim myReader As OleDbDataReade

我正在使用Visual Basic 2012中的Windows窗体应用程序使用.ADOX创建新的Microsoft Access数据库。我可以创建数据库,但不能在数据库中创建表

我的代码是:

Imports ADOX
Imports System.Data.OleDb
Public Class Form1
Dim mycommand As OleDbCommand
Dim myconnection As OleDbConnection
Dim myReader As OleDbDataReader
Dim str As String
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim cat As New Catalog()
    Dim tablename As String = "Users"
    cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\important\DDL.mdb;Jet OLEDB:Engine Type=5")
    cat = Nothing
    myconnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\important\DDL.mdb ")
    myconnection.Open()
    str = "CREATE TABLE [ " & tablename & "] ([Username] varchar(50)), ([Password] varchar(50)), ([E-mail] varchar(75))"
    mycommand = New OleDb.OleDbCommand(str, myconnection)
    mycommand.ExecuteNonQuery()
    MsgBox("Database created")
End Sub
End Class
错误是get是:

An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll

Additional information: Syntax error in CREATE TABLE statement.
感谢您的帮助

编辑: 下面的代码通过了第一个错误,但我现在得到了一个字段定义错误,我知道代码应该可以工作,因为它可以添加一个数字字段,可能是因为access中的字段类型是短文本和长文本,但我尝试过的任何操作似乎都不起作用

Imports ADOX
Imports System.Data.OleDb
Public Class Form1
Dim mycommand As OleDbCommand
Dim myconnection As OleDbConnection
Dim myReader As OleDbDataReader
Dim str As String
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim cat As New Catalog()
    cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\important\DDL.mdb;Jet OLEDB:Engine Type=5")
    cat = Nothing
    myconnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\important\DDL.mdb ")
    myconnection.Open()
    str = "CREATE TABLE [Users] (Username Varchar(50), Password Varchar(50), E-mail Varchar(50))"

    mycommand = New OleDb.OleDbCommand(str, myconnection)
    mycommand.ExecuteNonQuery()
    MsgBox("Database created")
End Sub
End Class

看起来括号太多了,但我认为实际错误来自查询中的前导空格:

                     V
str = "CREATE TABLE [ " & tablename & "]
尝试将其更改为:

str = "CREATE TABLE [" & tablename & "] ([Username] varchar(50), [Password] varchar(50), [E-mail] varchar(75))"
确保处置对象,最好是在使用块中:

例如:

Using cn As New OleDb.OleDbConnection(mdb)
  cn.Open()
  Using cmd As New OleDb.OleDbCommand(str, cn)
    cmd.ExecuteNonQuery()
  End Using
End Using

最后,代码如下所示:

Imports ADOX
Imports System.Data.OleDb
Public Class Form1
    Dim mycommand As OleDbCommand
    Dim myconnection As OleDbConnection
    Dim myReader As OleDbDataReader
    Dim str As String
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim cat As New Catalog()
        cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test\DDL.mdb;Jet OLEDB:Engine Type=5")
        cat = Nothing
        Using myconnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test\DDL.mdb ")
            myconnection.Open()
            str = "CREATE TABLE [Users] ([Username] varchar(50), [Password] varchar(50), [E-mail] varchar(50))"

            Using mycommand As New OleDb.OleDbCommand(str, myconnection)
                mycommand.ExecuteNonQuery()
            End Using
        End Using
        MsgBox("Database created")
    End Sub
End Class

谢谢,我得到了代码,但我不能让它将字段定义设置为短文本(但如果我将字段定义设置为数字,它确实有效)。有什么想法吗?(我用我使用的新代码编辑了我上面的问题)@Dan您缺少大小,就像在您原来的帖子中:
varchar(50)
。我也尝试过添加大小,但我仍然得到一个字段定义错误,它可以被称为其他名称而不是varchar吗?@Dan请确保将这些变量名放在括号中
[Password]
是一个关键字,因此必须将其括起来。在你的邮件栏上划一个破折号是个坏主意,我们称之为电子邮件。如果你不能更改它,你也必须把它放在括号里:
[E-mail]
你原来的帖子把这些字段放在括号里,所以我不明白你为什么要删除它们。好吧,干杯,把它们去掉,因为其他一些例子没有放在括号里,但你说的话是有意义的,谢谢。如果这能解决问题,我会告诉你的。我把问题退回去了。请不要更改原始问题-它会使针对该问题发布的任何答案无效。