我需要在我的表中插入加密的信用卡号,我必须使用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();
答案 0 :(得分:4)
好吧,如果你打印出你的SQL语句,你可能会发现问题。但是,不应该只修复语法。你应该放弃你完全使用价值的方式。
你应该绝对在这里使用参数化的SQL:
'
添加到每个值的开头和结尾将值直接放入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/。