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サーバーによって入力されたときに保存された値がエスケープされていることだと思います。時計では「IMAC20 \ "/ 2.26 / 2X1GB / 160GB / SD / MSE/KB」と表示されます。リスト。エスケープされた引用符とエスケープされていない引用符をString.ReplaceとRegExステートメントに置き換えてみました。TBH引用符が正しい方向に進んでいるかどうかさえわかりません。すべてのリターンには1つが含まれ、すべてがループするわけではありません。

4

1 に答える 1

1

二重引用符は問題にはなりません。文字列内では、二重引用符は単なる別の文字です。(これらは文字列定数以外の意味を持っていますが、それはここで起こっていることではありません。)

あなたの問題はSQL構文エラーではないと強く思います。もしそうなら、あなたはそれが複数の場所に現れるのを見るでしょう。

たとえば、SQLプロファイラーに表示されます(トレースにエラーと例外が含まれている場合)。また、SSMSに貼り付けたばかりの正確なSQLクエリを実行して、機能する/機能しないことを確認することもできます。さらに重要なことに、クエリがエラーを返した場合、C#側でSQL例外が発生します。これらのいずれも発生していない場合、クエリは機能しているように見えます。

多くの場合、クエリは実行されていますが、何も実行されていないため、更新が必要な場合と同じレコードを何度も取得しています。繰り返しになりますが、SSMSで実行すると、この問題を追跡するのに役立つ「1行が更新されました」というメッセージが表示されます。

于 2012-08-24T18:46:12.317 に答える