尝试在asp.net中从LINQ执行SQL服务器中的专业版。 当我在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);
}
错误之后我用Google搜索并将我的设计器页面更改为,(删除了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文件中将字符串设置为返回类型 仍然没有用,不知道遗失了什么。
其他信息 在我的程序中有Temp表和表变量,可能就是这个原因吗?
有些回复会非常有用......谢谢
答案 0 :(得分:0)
尝试更改存储过程,使其直接返回文本,而不是通过输出参数。
在最后再添加一行:
SELECT @BODY_TEXT_O;
答案 1 :(得分:0)
你很亲密;您需要将存储过程的返回类型(在dbml中)更改为int。
Linq实际执行此sql命令,该命令将执行结果作为int:
返回DECLARE @ReturnValue int
EXEC @ReturnValue = [dbo].[VIEW_COLUMN]
SELECT 'ReturnValue' = @ReturnValue
答案 2 :(得分:-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));
}