0

我有一个带有 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 我什至不确定我是否在正确的轨道上引用。我只是在看它,因为没有所有返回都包含一个,并且它们不会全部循环。

4

1 回答 1

1

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

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

例如,您会在 SQL Profiler 中看到它们(如果您在跟踪中包含错误和异常)。您还可以运行刚刚粘贴到 SSMS 中的确切 SQL 查询,并查看它是否有效。更重要的是,如果查询返回错误,您将在 C# 端收到 SQL 异常。如果这些事情都没有发生,那么您的查询似乎正在工作。

更有可能的是,查询正在运行,但没有执行任何操作,因此您一遍又一遍地获取相同的记录,因为需要更新。同样,在 SSMS 中运行会给您“1 行已更新”消息,它应该可以帮助您跟踪此问题。

于 2012-08-24T18:46:12.317 回答