値を返すsubsonic3.0のストアドプロシージャをどのように実行しますか?たとえば、ストアドプロシージャの多くは@@ IDを返しますが、テーブルを再クエリせずにその値にアクセスする方法を理解することはできません。繰り返しますが、出力パラメーターではなく、戻り値です。
7 に答える
StoredProcedure sproc = db.FancySchmancySproc();
sproc.Execute();
int output = (int)sproc.Output; // returns type 'object' so you'll need to cast
私はそのようにActiveRecordを使用してストアドプロシージャを実行してきました。
// Connect to DB and run the stored proc into a dataset
myDatabasedb db = new myDatabasedb();
DataSet ds = db.myStoredProc(firstparam, secondparam, etc);
// Now you can do what you like with the dataset!
Gridview1.datasource = ds.executeDataSet();
わかりました...ジョン・シーハンが言ったことで動作しましたが、突然例外が発生し始めました。
次のSPでテストしています。
GOでANSI_NULLSを設定GOでQUOTED_IDENTIFIERを設定CREATEPROCEDURETestLocal
@数値(18,0)AS
始める
NOCOUNTをオンに設定します。
10を返す
終わり
行く
C#での私のコードは次のとおりです
StoredProcedure sp = new DB()。TestLocal(1);
sp.Execute();
int timeLeft =(int)sp.Output;
リターンtimeLeft;
編集1:
次のようにして動作させましたが、それが正しい方法ではないと思います。
StoredProcedure sp = new DB()。TestLocal(1);
sp.Command.AddReturnParameter();
sp.Execute();
int myReturnValue =(int)sp.Command.OutputValues [0];
myReturnValueを返します。
これは私のために働く:
StoredProcedure sproc = db.FancySchmancySproc();
sproc.ExecuteScalar<int>();
StoredProcedure sp = SPs.TestProcedure(0);
sp.Command.AddReturnParameter();
object retValue = sp.Command.Parameters.Find(delegate(QueryParameter p)
{
return p.Mode == ParameterDirection.ReturnValue;
}).ParameterValue;
if (retValue!=null)
{
// cast the value to the type expected
int rc = (int) retValue;
}
それは私が思ったことですが、sproc.outputは常にnullです。最新バージョン3.0.0.3にバグがあるのだろうか
StoredProcedure sproc = db.FancySchmancySproc();
sproc.ExecuteDataSet();