【发布时间】:2012-08-24 18:22:36
【问题描述】:
我有一个带有 C# 的 ASP.NET 应用程序。应用程序从 WebServices 获取数据,然后它应该执行以下更新。
sqlQueryString2 = "
UPDATE CI
SET
platform =@platform ,
wstart = @wstart,
wend = @wend,
model = @model,
productDescription = @productDescription,
scanflag = @scanflag
WHERE serial = @serial ";
我意识到当从 Web 服务返回某些值时,我的应用程序似乎在循环。 UPDATE 被发送,不提交,然后在需要更新的下一个循环中再次拾取。
我在 SQL(Server 2005) 中进行了跟踪,这就是服务器受到的影响:
exec sp_executesql N'
UPDATE CI
SET
platform =@platform ,
wstart = @wstart,
wend = @wend,
model = @model,
productDescription = @productDescription,
scanflag = @scanflag
WHERE
serial = @serial ',N'
@serial nvarchar(11),
@platform nvarchar(23),
@wstart varchar(10),
@wend nvarchar(10),
@model nvarchar(24),
@productDescription nvarchar(35),
@scanflag nvarchar(1)',
@serial=N'H01170RAHS6',
@platform=N'Client Computer - Apple',
@wstart=N'05/09/2011',
@wend=N'05/09/2012',
@model=N'iMac (20-inch, Mid 2009)',
@productDescription=N'IMAC 20"/2.26/2X1GB/160GB/SD/MSE/KB',
@scanflag=N'Y'
我怀疑 productDescription 中的单个双引号可能会抛出它,但我有一段时间试图将其剥离或替换为 (in.)。 我认为我在这方面的部分问题是当它被 WebServices 服务器填充时存储的值被转义,因为我可以在手表中将其视为“IMAC 20\”/2.26/2X1GB/160GB/SD/MSE/KB”列表。 我尝试用 String.Replace 以及 RegEx 语句替换转义和非转义引号。 TBH 我什至不确定我的报价是否正确。我只是在看它,因为并非所有返回都包含一个,而且它们也不都是循环的。
【问题讨论】:
-
你能显示更多的代码吗,例如循环是如何构造的?您使用什么标准来确定要更新哪些 @serial 值?
-
你是如何进行这个数据库调用的?参数中的双引号会抛出更新语句,只会尖叫Sql Injection Vulnerability...
-
我过去做过这样的更新,其中包含双引号并且没有问题,所以我不确定这是问题所在(但我可能是错的)。 SQL Profiler 是否显示对该语句的任何写入?
-
@Aron Bertrand- 循环是根据此查询的返回构建的:字符串 countQuery = "SELECT TOP 1 * FROM CI WHERE ([wend] IS NULL AND [scanflag] = 'N')" ;我对其进行 COUNT 以确定我需要填充多少条目,然后我在没有 COUNT 的情况下运行它,而不是列表中的每个条目。基本上,我在 SQL 中有一个序列号列表,我检查了 wend 和 scanflag 值的 2 个条件。当我从 Web 服务返回所有数据时,我将其写出并将扫描标志从“N”设置为“Y”
-
@user1431356 好的...但是如果 Apple 将他们的下一台 Macbook 命名为
'; Drop Table CI;--,请不要来找我哭...
标签: c# asp.net sql-server web-services