SQL UPDATE查询无声地失败,我怀疑是敌人双引号

时间:2012-08-24 18:22:37

标签: c# asp.net sql-server web-services

我有一个带有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我甚至不确定我的报道是否正确。我只是看着它,因为并非所有的返回都包含一个,并且它们都不会循环。

1 个答案:

答案 0 :(得分:1)

双引号应该不是问题:在字符串内部,它们只是另一个字符。 (它们具有字符串常量的外部,但这不是这里发生的事情。)

我强烈怀疑您的问题不是SQL语法错误。如果是的话,你会看到它出现在多个地方。

例如,您将在SQL事件探查器中看到它们(如果您在跟踪中包含错误和异常)。您还可以运行刚刚粘贴到SSMS中的确切SQL查询,并看到它确实/不起作用。更重要的是,如果查询返回错误,您将在C#端获得SQL异常。如果这些事情都没有发生,那么您的查询似乎正在发挥作用。

更有可能的是,查询正在运行,但没有做任何事情,因此您需要一遍又一遍地选择相同的记录,因为需要更新。同样,在SSMS中运行将为您提供“1行更新”消息,该消息可帮助您解决此问题。