Vb.net 用vb中的Adox在access数据库中创建表
我正在使用Visual Basic 2012中的Windows窗体应用程序使用.ADOX创建新的Microsoft 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
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]
你原来的帖子把这些字段放在括号里,所以我不明白你为什么要删除它们。好吧,干杯,把它们去掉,因为其他一些例子没有放在括号里,但你说的话是有意义的,谢谢。如果这能解决问题,我会告诉你的。我把问题退回去了。请不要更改原始问题-它会使针对该问题发布的任何答案无效。