我有一个带有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。)替换它的bugger。 我认为我前面的部分问题是当WebServices服务器填充时存储的值被转义,因为我在手表中可以看到它是“IMAC 20 \”/ 2.26 / 2X1GB / 160GB / SD / MSE / KB“名单。 我尝试用String.Replace替换转义和非转义的引用以及RegEx语句。 TBH我甚至不确定我的报道是否正确。我只是看着它,因为并非所有的返回都包含一个,并且它们都不会循环。
答案 0 :(得分:1)
双引号应该不是问题:在字符串内部,它们只是另一个字符。 (它们具有字符串常量的外部,但这不是这里发生的事情。)
我强烈怀疑您的问题不是SQL语法错误。如果是的话,你会看到它出现在多个地方。
例如,您将在SQL事件探查器中看到它们(如果您在跟踪中包含错误和异常)。您还可以运行刚刚粘贴到SSMS中的确切SQL查询,并看到它确实/不起作用。更重要的是,如果查询返回错误,您将在C#端获得SQL异常。如果这些事情都没有发生,那么您的查询似乎正在发挥作用。
更有可能的是,查询正在运行,但没有做任何事情,因此您需要一遍又一遍地选择相同的记录,因为需要更新。同样,在SSMS中运行将为您提供“1行更新”消息,该消息可帮助您解决此问题。