【问题标题】:C# - Creating an index including a column name which is a keywordC# - 创建包含作为关键字的列名的索引
【发布时间】:2012-07-09 17:21:39
【问题描述】:

我有一个创建 Access MDB 文件的 C# 程序。表和列的名称是固定的,我没有机会更改它们。不幸的是,其中一列被命名为“组”。

我写的代码是这样的:

string indexSQL = buildIndexString(table.TableName);
//indexSQL = "CREATE INDEX comp ON ExpFactMap([Group]);"
new OleDbCommand(indexSQL, conn).ExecuteNonQuery();

执行 ExecuteNonQuery() 时,出现语法错误。如果我使用“组”以外的任何列,则代码可以正常工作。问题似乎在于它将 Group 解释为关键字而不是列名。

有谁知道如何解决这个问题?在理想情况下,我会更改列的名称,但不幸的是,这是不可能的。

【问题讨论】:

  • 究竟为什么不可能?
  • 你所拥有的应该工作,你确定 indexSQL 正是“CREATE INDEX comp ON ExpFactMap([Group]);”用大括号和方括号?
  • 尝试“CREATE INDEX comp ON ExpFactMap(([Group]));”
  • 在您的代码中,sn-p buildIndexString 正在返回要执行的 SQL 字符串。您确定该字符串包含方括号中的列名吗?
  • 查看 SQL 小提琴:sqlfiddle.com/#!3/2cf5d/1/0 这很好用,它一定是您的 c# 代码中的其他内容。

标签: c# ms-access indexing


【解决方案1】:

Group 不是您尝试在 DDL 语句中用作对象名称的唯一保留字:

//indexSQL = "CREATE INDEX comp ON ExpFactMap([Group]);"

很遗憾,“comp”也是一个保留字。见Problem names and reserved words in Access

CREATE INDEX 语句中将保留字括起来:

CREATE INDEX [comp] ON ExpFactMap([Group]);

【讨论】:

  • 是的,你是对的,我觉得有点愚蠢。不知何故,我没有想到 comp 也是一个关键字。 comp 周围的括号解决了这个问题。感谢您的帮助。
  • 除了我链接的那个页面之外,Allen Browne 还提供了一个免费实用程序来检查您的 Access 数据库中的问题对象名称(以及其他潜在的“陷阱”问题):allenbrowne.com/AppIssueChecker.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 2010-11-15
相关资源
最近更新 更多