一、默认值和级联更新删除关键字DEFAULT和ON
DEFAULT和ON是MS ACCESS SQL系统关键字,SQL语句中如果含有系统关键字,在ACCESS界面是无法执行的。如下SQL语句:
Create TABLE periodtbl
(
PDID AUTOINCREMENT,
PDname text(10) NOT NULL,
CONSTRAINT pk_periodtbl_PDID PRIMARY KEY (PDID),
CONSTRAINT UQ_periodtbl_PDname UNIQUE (PDname)
);
和
Create TABLE studenttbl
(
STUID AUTOINCREMENT,
STUname text(20) DEFAULT '请录入姓名',,
PDID INTEGER NOT NULL,
CONSTRAINT PK_studenttbl_STUID PRIMARY KEY (STUID),
CONSTRAINT FK_studenttbl_periodtbl_PDID FOREIGN KEY (PDID)
REFERENCES periodtbl(PDID)
ON Delete NO ACTION
ON Update CASCADE
);
执行进弹窗提示语法错误,如图:
但在VB.NET中却可以很好的执行:
Dim sqlstring As String = "Create TABLE studenttbl" & Environment.NewLine _
& "(" & Environment.NewLine _
& "STUID AUTOINCREMENT," & Environment.NewLine _
& "STUname text(20) DEFAULT '请录入姓名'," & Environment.NewLine _
& "PDID INTEGER NOT NULL," & Environment.NewLine _
& "CONSTRAINT PK_studenttbl_STUID PRIMARY KEY (STUID)," & Environment.NewLine _
& "CONSTRAINT FK_studenttbl_periodtbl_PDID FOREIGN KEY (PDID)" & Environment.NewLine _
& " REFERENCES periodtbl(PDID)" & Environment.NewLine _
& " ON Delete NO ACTION" & Environment.NewLine _
& " ON Update CASCADE" & Environment.NewLine _
& ");"
'连接数据库
Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\KingOne\Desktop\data\Database.accdb")
'打开数据库
conn.Open()
'生成命令
Dim cmd As New OleDbCommand(sqlstring, conn)
'执行命令
cmd.ExecuteNonQuery()
'关闭数据库
conn.Close()
执行后打开ACCESS文件查看效果:
二、vb.net系统关键字 position
在ACCESS界面可以很好的执行“SELECT position.* FROM position;”,但放到VB.NET程序中执行却报错,如图:
把SQL语句修改为SELECT [position].* FROM [position]后正常执行命令。
三、原因分析
DEFAULT和ON是MS ACCESS SQL系统关键字所以无法在ACCESS界面执行,而position是VB.NET关键字所以无法在VB.NET中执行。对于MS ACCESS系统关键字可以直接放到VB.NET中执行,而对于VB.NET程序的系统关键字做表名或字段名用[]括起,当然最好不要使用系统关键字为妥。