2 列、1 行のデータを返す非常に単純なストアド プロシージャがあります。
SELECT client_id, client_code
FROM wv.client_identifiers
WHERE (client_code = @client_code)
AND (version = 0)
AND (facility_id = @facility_id)
AND (is_active = 1)
AND (client_version = 0)
このテーブルが重複することはありません。過去 2 年間、Web プロジェクトでこの手順をテストしたところ、意図したとおりに機能しました。SSMS および Visual Studio サーバー エクスプローラーで正常に動作します。これを ADO.NET Entity Framework の WCF サービス プロジェクトに追加すると、問題が発生します。
これを確認し、関数を作成したり、複雑な型を作成したりします。WPFプロジェクトからこの罰金を呼び出すことはできますが、返されたデータは、まったく正しいとしても一貫性がありません。
たとえば、3行あります。
client_id client_code
1001 1252
1002 6655
1003 123
1004 111
1005 5522
パラメータを使用してサービスを介して上記の手順を実行すると、悪い結果が返されます。
using(var context = new service.MyService())
{
var Clients = context.GetClientIDFromClient_Code(facility_id, true, client_code)
foreach(var client in Clients)
{
int ClientID = client.client_id;
}
- 5522 のパラメーター値を渡すと、null の結果が得られます。
- 123 のパラメーター値を渡す
client_id 1004
とcode
、111 の結果が得られます。 - 1252 のパラメーター値を渡すと、
client_id 1004
111 の結果とコードが得られます。 1
で始まる何かを渡すと、同じ結果が得られます。- 1 で始まらないが DB にあり、返されるはずの ANYTHING を入力すると、null が返されます。
なぜWCFがハングアップを引き起こしているのかわかりません。これを linq to sql クラスのデータベース ファイルに入れると、問題なく動作します。私はこれをさまざまな方法で呼び出してみたり、単一の列または単一の値を返そうとしたり、ほぼすべてを試しました。これと同様のすべての手順でそれを行っているかどうかはわかりませんが、推測する必要がある場合はそうなります。
前もって感謝します