语法错误不正确

时间:2012-03-13 07:43:47

标签: c# .net sql-server

我需要在我的表中插入加密的信用卡号,我必须使用sql server的对称密钥逻辑。当我试图运行下面的代码时,它会在Processors_Key_0附近给出错误的错误语法。我不明白我哪里出错了。

string query = "OPEN SYMMETRIC KEY Processors_Key_01 DECRYPTION BY CERTIFICATE Processors INSERT INTO [Payees] VALUES ("
                + objpayee.BookingID + ", '" + address.ID + ", " + objpayee.PaymentTypeID +
                ", " + objpayee.LName +", " + objpayee.FName + ", EncryptByKey(Key_GUID('Processors_Key_01'), '" + objpayee.CardNumber +
                "'), "+ objpayee.ExpMonth + "', " + objpayee.ExpYear +", '" + objpayee.CardNumber.Substring(objpayee.CardNumber.Length - 4) +
                "', " + objpayee.Email + "', " + objpayee.Phone + "',null,null,null,null,'1-1-2015',null,null,'1-1-2015') CLOSE SYMMETRIC KEY Processors_Key_01; SELECT SCOPE_IDENTITY();";
        var id = (int)_db.ExecuteStoreQuery<decimal>(query).SingleOrDefault();

3 个答案:

答案 0 :(得分:4)

好吧,如果你打印出你的SQL语句,你可能会发现问题。但是,不应该只修复语法。你应该放弃你完全使用价值的方式。

你应该绝对在这里使用参数化的SQL:

  • 它会使您的SQL更容易阅读
  • 您无需担心将'添加到每个值的开头和结尾
  • 它会保护您免受SQL injection attacks
  • 的侵害

将值直接放入SQL是一个非常非常坏主意,你不应该这样做。

查看SqlCommand.Parameters的文档,了解如何使用参数化SQL的示例。或者,使用ORM或类似的东西,首先会隐藏所有这些......

答案 1 :(得分:1)

而不是

... INSERT INTO [Payees] VALUES (...)

这样做

... INSERT INTO [Payees] ...

答案 2 :(得分:0)

您可以使用

解决问题

插入[PAYEES] SELECT Column1,Column2 .... ColumnX。

我在这里有点担心。为什么要尝试将信用卡信息存储在数据库中,这违反了PCI安全标准。所有信用卡信息都应存储在支付提供商数据库中。有关详细信息,请参阅https://www.pcisecuritystandards.org/