Visual Studio执行Access建表SQL复制表结构时触发语法错误
问题原因
你存储在query1中的SQL语句存在两处明确错误,是触发语法报错的直接原因:
SELECT子句内TIME字段后多写了冗余逗号,Access SQL解析到逗号后找不到后续待查询字段,会直接抛出语法异常- Access ACE引擎不支持
CREATE TABLE ... SELECT的建表语法,且该写法也无法实现「仅复制现有表格式创建新表」的需求
修正方案
Access中复制表结构/表数据的标准语法为SELECT [字段列表] INTO [新表名] FROM [源表名] [WHERE 筛选条件],不需要额外写CREATE TABLE关键字,引擎会自动根据查询返回的字段结构创建对应新表:
- 若需求为仅复制TIME_LOG的表结构(字段、类型、基础属性),不复制原有数据,使用如下SQL:
// 方括号包裹新表名,避免输入的表名含空格、特殊字符、保留字触发语法错误 string query1 = $"SELECT * INTO [{textBox1.Text.Trim()}] FROM TIME_LOG WHERE 1=2";
- 若需求为复制表结构同时同步TIME_LOG内的全部数据,去掉末尾的
WHERE 1=2条件即可:
string query1 = $"SELECT * INTO [{textBox1.Text.Trim()}] FROM TIME_LOG";
优化后完整代码
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath; // using块自动释放连接资源,无需手动调用Close(),异常场景下也不会出现连接泄漏 using (OleDbConnection connect = new OleDbConnection(connString)) { connect.Open(); string query1 = $"SELECT * INTO [{textBox1.Text.Trim()}] FROM TIME_LOG WHERE 1=2"; OleDbCommand command = new OleDbCommand(query1, connect); command.ExecuteNonQuery(); }
内容的提问来源于stack exchange,提问作者Big72Red
相关产品推荐
相关产品推荐

