vb.net - 将遗留代码转换为参数化查询的问题
问题描述
我有一段看起来像这样的遗留代码:
Dim Sql = "declare @id int " &
"select @id = id from wa_merchant where merchant_id = '" & db.SqlSafe(p.Merchant.MerchantID) & "' " &
"insert into wa_postback_processing ( merchant_id, [url], [data] ) values ( " &
"@id, " &
"'" & db.SqlSafe(p.Postback.HttpsUrl) & "', " &
"'response=" & db.SqlSafe(HttpUtility.UrlEncode(UTF8(pr.ToXml()))) & "' )"
db.ExecuteNonQuery(Sql)
我将其转换为参数化插入。这是我的插入的样子:
Dim cmd As New SqlCommand("insert into wa_postback_processing ( merchant_id, [url], [data] ) values (@MerchantID , @Url1 , @url2", con)
cmd.Parameters.Add("@MerchantID", sqlDbType:=SqlDbType.VarChar).Value = sMerchantID
cmd.Parameters.AddWithValue("@url1", p.Postback.HttpsUrl)
Dim url2 = HttpUtility.UrlEncode(UTF8(pr.ToXml()))
cmd.Parameters.AddWithValue("@url2", "response = " & "'" & url2 & "'")
Try
cmd.Connection.Open()
cmd.ExecuteNonQuery()
Catch ex As Exception
Trace.WriteLine(ex.Message & ex.Source, LogLevel.Debug)
Finally
cmd.Connection.Close()
End Try
但是,我在执行时不断收到此异常:'@url2' 附近的语法不正确。
@url2 的数据如下所示
%3c%3fxml+version%3d%221.0%22+encoding%3d%22utf-8%22%3f%3e%0d%0a%3cPaymentResponseType+xmlns%3axsi%3d%22http%3a%2f%2fwww.w3.org%2f2001%2fXMLSchema-instance%22+xmlns%3axsd%3d%22http%3a%2f%2fwww.w3.org%2f2001%2fXMLSchema%22%3e%0d%0a++%3cResponse%3e%0d%0a++++%3cResponseIndicator%3eA%3c%2fResponseIndicator%3e%0d%0a++++%3cResponseCode%3e000001%3c%2fResponseCode%3e%0d%0a++++
我完全不知所措。谢谢
解决方案
推荐阅读
- java - 使用蓝牙从 Android App 读取数据
- accessibility - Authorize.Net Verified Merchant Seal (AuthorizeNetSeal) 不符合 WAI-ARIA
- c# - 使用 Confluent 的 .NET API 的多个 Topis 的 Kafka 消费者
- macos - 如何在不运行容器的情况下访问容器内部
- c++ - 有人可以详细解释这个回文代码是如何工作的吗?
- python - 如何按行对熊猫数据框的值求和?
- .net - 如何在.net中拆分一行而不拆分单词
- python - TF2.x 自定义损失函数,numpy
- react-native - 使用反应导航时,要从子组件中隐藏父组件标题按钮?
- vue.js - 可能改变类星体组件的设计吗?