6

我试图在 asp.net 中从 LINQ 执行 SQL-server 中的 pro。当我在 SQL 中执行 Proc 时它工作正常,但是当我尝试从 asp.net 中的 linq 调用它时,它会抛出以下错误“System.Void'不是映射存储过程方法的有效返回类型”这是我的过程,

   ALTER PROCEDURE [dbo].[VIEW_COLUMN] 

   @REPORT_NO INT ,
   @TEMPLATE_NAME VARCHAR(100),
   @BODY_TEXT VARCHAR(500),
   @BODY_TEXT_O VARCHAR(500) OUTPUT

   AS
   BEGIN
  --DECLARE VARIABLES--
  DECLARE @BODY_TEXT VARCHAR(100)

   ----------- etc----
   ------etc etc-----
   SET @BODY_TEXT_O = @BODY_TEXT
   END

在我的 ASP.net 页面中,

    using (EHSIMSDataContext db = new EHSIMSDataContext(EHSIMSConnectionString.GetConnectionString()))
    {

        string MainString = _EmailTemp.TEMPLATE_TEXT;
        int? R = 000001;
        string b = "";
        string temname = _EmailTemp.VIEW_NAME;
        db.VIEW_COLUMN(R, temname, MainString, ref b);
    }

错误之后,我用谷歌搜索并将我的设计器页面更改为,(删除了 void 并添加了字符串并添加了最后一个返回行)

          public string VIEW_COLUMN ------etc
           {
             IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), rEPORT_NO, tEMPLATE_NAME, bODY_TEXT, bODY_TEXT_O);
        bODY_TEXT_O = ((string)(result.GetParameterValue(3)));
                    return ((string)(result.ReturnValue));
         }

并且上面的代码以及“Public Void VIEW_COLUMN”的方法没有返回,这仍然显示了一些不同的错误,我还尝试在我的程序属性的DBML文件中将字符串设置为返回类型仍然没有用,不要不知道缺少什么。

附加信息 我的程序中有一个临时表和表变量,可能是这个原因吗?

一些回复会非常有帮助......谢谢

4

3 回答 3

2

你很近;您需要将存储过程(在您的 dbml 中)的返回类型更改为 int。

Linq 实际上执行了这个 sql 命令,它以 int 形式返回执行结果:

DECLARE @ReturnValue int

EXEC    @ReturnValue = [dbo].[VIEW_COLUMN]

SELECT  'ReturnValue' = @ReturnValue
于 2015-12-12T23:06:15.750 回答
1

尝试更改您的存储过程,使其直接返回文本,而不是通过输出参数。

在末尾再添加一行:

SELECT @BODY_TEXT_O;
于 2013-07-17T10:43:39.273 回答
-1
public string VIEW_COLUMN ------etc
{
  IExecuteResult result = this.ExecuteMethodCall(this, 
  ((MethodInfo(MethodInfo.GetCurrentMethod())), rEPORT_NO, tEMPLATE_NAME, bODY_TEXT, bODY_TEXT_O);
  bODY_TEXT_O = ((string)(result.GetParameterValue(3)));
  return ((string)(result.ReturnValue));
}

更改上面的代码,如下所示,

public int VIEW_COLUMN ------etc
{
   IExecuteResult result = this.ExecuteMethodCall(this, 
   ((MethodInfo(MethodInfo.GetCurrentMethod())), rEPORT_NO, tEMPLATE_NAME, bODY_TEXT,bODY_TEXT_O);
   bODY_TEXT_O = ((string)(result.GetParameterValue(3)));
   return ((int)(result.ReturnValue));
}
于 2020-07-07T17:43:40.223 回答