C# SQL中用于创建表C的语法错误

C# SQL中用于创建表C的语法错误,c#,sql,C#,Sql,女士们,先生们,大家好 我正在努力寻找我认为应该是一个简单的解决办法,但却找不到 基本上,我是通过SQL创建表的,当我运行SQL时,它有一个问题。 这是我的密码: OleDbCommand cmd=新的OleDbCommand @创建表+客户端ID+ 事务ID INT主键不为空, 事务处理CHAR255, 日期, 交易金额INT, 平衡整数, 交存整数, 撤回INT, 国际贷款, 应用整数, 核准整数, 每月支付整数, 月收入整数,mydb 现在,我测试了我的SQL语句,以找出SQL的哪一部分出

女士们,先生们,大家好

我正在努力寻找我认为应该是一个简单的解决办法,但却找不到

基本上,我是通过SQL创建表的,当我运行SQL时,它有一个问题。 这是我的密码:

OleDbCommand cmd=新的OleDbCommand @创建表+客户端ID+ 事务ID INT主键不为空, 事务处理CHAR255, 日期, 交易金额INT, 平衡整数, 交存整数, 撤回INT, 国际贷款, 应用整数, 核准整数, 每月支付整数, 月收入整数,mydb

现在,我测试了我的SQL语句,以找出SQL的哪一部分出现了错误,并且在删除fieldsTransaction及其工作日期时找到了错误。如果我只删除其中一个,它仍然会崩溃。我甚至尝试将数据类型(如CHAR255)更改为VARCHAR255,也将DATE更改为INT

老实说,我似乎找不到问题。 请帮忙

谢谢你抽出时间


PS:ClientID是三个数字和三个字母的组合,例如一个标签。123ABC

这两个列名是SQL中的保留字。将它们括在方括号中可以解决您的问题:

[Transaction] CHAR(255), 
[Date] DATE,
请记住,任何时候在动态SQL或存储过程中访问这些字段时,都必须使用方括号,即

SELECT * FROM ClientTable WHERE [Transaction] = 'A'

这两个列名是SQL中的保留字。将它们括在方括号中可以解决您的问题:

[Transaction] CHAR(255), 
[Date] DATE,
请记住,任何时候在动态SQL或存储过程中访问这些字段时,都必须使用方括号,即

SELECT * FROM ClientTable WHERE [Transaction] = 'A'

更好的解决方案是对这些列名更加具体。通过事务,OP是指TransactionId或TransactionCode还是类似的东西?按日期是指处理日期、应处理日期、批准日期、首次输入日期?更具描述性的列名是可取的。我完全同意,但有时开发人员无法控制列名,他们必须能够处理这些情况。例如,我们使用了一个已有15年历史的应用程序,它的列名与这些列名相似,基于源应用程序的脆弱性,我们无法尝试更改列名,因此我们只能采用这种解决方法。显然不理想,但这是一个现实场景。一个没有解决的更大问题是表名:以数字开头命名表永远不会起作用。此外,根据SQL OP使用的是什么风格,列名的关键字Date可能不需要转义。在MS SQL 2012中,它可以在没有主题化的情况下工作。@Michael:我让表命名滑动,因为OP说在删除列时它可以工作,所以我假设表名的格式与发布的格式不完全一样。但是,方括号允许您创建和使用以数字开头的表名。更好的解决方案是对这些列名更加具体。通过事务,OP是指TransactionId或TransactionCode还是类似的东西?按日期是指处理日期、应处理日期、批准日期、首次输入日期?更具描述性的列名是可取的。我完全同意,但有时开发人员无法控制列名,他们必须能够处理这些情况。例如,我们使用了一个已有15年历史的应用程序,它的列名与这些列名相似,基于源应用程序的脆弱性,我们无法尝试更改列名,因此我们只能采用这种解决方法。显然不理想,但这是一个现实场景。一个没有解决的更大问题是表名:以数字开头命名表永远不会起作用。此外,根据SQL OP使用的是什么风格,列名的关键字Date可能不需要转义。在MS SQL 2012中,它可以在没有主题化的情况下工作。@Michael:我让表命名滑动,因为OP说在删除列时它可以工作,所以我假设表名的格式与发布的格式不完全一样。但是,方括号将允许您创建和使用以数字开头的表名。