2009-07-06 9 views
0

スカラーintを返すストアドプロシージャがあります。コンパイル時にC#とLinqを使用していますが、コンパイル時に次のエラーが発生します。 'C#Linq to SQLストアドプロシージャ

私の質問は、ストアドプロシージャがintを返すだけの場合、結果のデータを取得する方法です。私はデータテーブルとデータセットを使ってこれを行うことができますが、LINQでこれを行う必要があります。あなたはforeachの中に結果を反復処理しようとしているなぜあなただ​​けのintを返却する場合

AppDataContext app = new AppDataContext(); 
var lookup = app.spLookupFrom400(numberType, number); 
foreach(lookupResult result in lookup) 
{ 
    ... 
} 

答えて

0

は、ここでのサンプルコードは?

はあなたを言うことができますIntが

AppDataContext app = new AppDataContext(); 
Int32? lookup = 0; 
app.spLookupFrom400(numberType, number, ref lookup); 
0

が本当に必要な整数戻りますまたは単に結果セットを返すために、真の意図である...あなただけ行うことができるはず出力パラメータとしてマークされていますか?その場合は、整数の戻り値を削除し、ストアドプロシージャを再マップするか、コンテキスト内のSPの戻り値の型を適切なオブジェクト型にマップします。それ以外の場合はintが返されます。

+0

目的は結果セットを取得することです。ああ、btw、私はストアドプロシージャを変更することはできません。 –

2

ストアドプロシージャの整数戻りコードだけでなく、結果セットを返すことを意図していると仮定すると、LINQは結果セットの型を適切に判断できないと考えられます。

LINQ to SQLクラスモジュールのストアドプロシージャのプロパティを確認します。 LINQがモジュールに追加されたときに結果セットの型を判別できる場合は、 "(自動生成型)"と表示されます。そうでなければ、おそらく "整数"と言います。

これは、LINQが結果セットタイプを取得しようとしたときに何らかの理由でprocが失敗した場合に発生します。 procの結果セットが一時テーブルから派生した場合にも発生します。これに当てはまる場合は、手順の先頭に

SET FMTONLY OFF 

を追加してみてください。その後、サーバーエクスプローラでprocを更新してから、procを削除してLINQ to SQLクラスに再追加してリフレッシュします。

+0

ストアドプロシージャの記述が不適切ですが、変更できません。私のdbmlモジュールのspのプロパティは戻り値の型を "None"と識別しますが、私のコードで使用するときはint型だと思います。 –

+0

そして、あなたの選択したクエリツールで、指定されたパラメータでストアドプロシージャを実行するとします。 MS SQL Server用SQL Server Management Studio、どのような結果が得られますか?スカラー値、整数、結果セットなどは得られますか? –

+0

スカラーと結果セットの両方を取得します。 –

0

これまでの回答では、SQL Serverのストアドプロシージャは任意の数の結果セットを生成でき、でもの値を返すという事実は間違いです。ほとんどの場合、もちろん両方ではありませんので、LinqをSQLにトリプルアップしている可能性があります。

「マジックグルーコード」(LinqからSQLなど)が機能しなくなるたびに、私はいつもその作業を簡単にする方法を探します。

私は面倒なものを呼び出すが、スカラー値を破棄する別のストアドプロシージャを記述しようとします。

関連する問題