【发布时间】:2011-12-29 16:51:45
【问题描述】:
我们正在将数据库后端从 Access 迁移到 SQL Server。
其中一个字段名称是Key。现在Key 是a reserved word in both Access and SQL Server,所以Access 中的解决方法总是在字段名称周围加上方括号。
在连接到 Access 时,我们为每个 OleDBCommand 生成了一个 OleDBParameter 集合。在运行时检查命令的CommandText 会读取类似UPDATE Foo SET [Key]=? WHERE etc 的内容,因为记住OleDB/Access 没有命名参数,只有?。一切都很好。
快进到今天,使用 SQL Server,我们对 SqlCommand 和 SQLParameter 做了类似的事情。因此,在运行时CommandText 会读取类似于UPDATE Foo SET [Key]=@Key WHERE etc 的内容,因为SQL 不喜欢旧的问号,我们必须开始使用命名参数。
问题是应用程序在这个命令上阻塞,说:
Incorrect syntax near 'varchar'. Must declare the scalar variable "@Key"
只有字段名称为Key 的表受到影响。迁移到 SQL 后,其他所有内容都幸存下来,其他表(字段名称没有保留字)都很好。
我了解其中一种解决方案是避免使用保留字作为字段名称,但我希望得到一个答案,让我们能够像往常一样解决保留字。
【问题讨论】:
-
您能发布您用于命令及其参数绑定的代码块吗?很高兴看到您的代码,以便我们能够判断
@Key是否是未声明的变量/参数,或者没有任何内容绑定到该值占位符..
标签: .net sql-server ado.net reserved-words