3

如何在 subsonic 3.0 中执行返回值的存储过程?例如,我的许多存储过程都返回@@identity,而我不知道如何在不重新查询表的情况下访问该值。同样,不是输出参数,而是返回值。

4

7 回答 7

4
StoredProcedure sproc = db.FancySchmancySproc();
sproc.Execute();
int output = (int)sproc.Output; // returns type 'object' so you'll need to cast
于 2009-07-28T19:17:09.000 回答
1
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;

}
于 2009-08-05T02:04:22.477 回答
1

这对我有用:

StoredProcedure sproc = db.FancySchmancySproc();
sproc.ExecuteScalar<int>();
于 2010-01-05T05:20:55.023 回答
1

好的......我让它与约翰希恩所说的一起工作,突然它开始给我一个例外。

我只是在使用以下 SP 进行测试。


SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE TestLocal

@a 数字(18,0) AS

开始

设置无计数;

返回 10

结尾


我在 C# 中的代码如下


StoredProcedure sp = new DB().TestLocal(1);

sp.Execute();

int timeLeft = (int)sp.Output;

返回时间Left;


编辑1:

我通过执行以下操作使其正常工作,但我认为这不是正确的方法。


StoredProcedure sp = new DB().TestLocal(1);

sp.Command.AddReturnParameter();

sp.Execute();

int myReturnValue = (int)sp.Command.OutputValues[0];

返回我的返回值;

于 2011-01-09T08:56:12.857 回答
1

我一直在像这样使用 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();
于 2011-08-10T01:02:20.423 回答
0

这就是我的想法,但 sproc.output 始终为空。不知道最新版本3.0.0.3有没有bug

于 2009-07-29T13:43:57.620 回答
0
StoredProcedure sproc = db.FancySchmancySproc();
sproc.ExecuteDataSet();
于 2009-08-27T10:38:45.933 回答