【问题标题】:Using SQL Server stored procedure from MVC从 MVC 使用 SQL Server 存储过程
【发布时间】:2013-08-27 18:37:22
【问题描述】:

我在这个网站上找到了答案,但没有一个有效。我正在尝试从 ASP.NET MVC Web api 中的简单存储过程返回结果。

这行得通:

 ctx.Database.SqlQuery <model>("StoredProc 1251");

但是,我一直认为像这样包含内联参数是不好的做法。

我尝试过的其他方法都没有——这里有一些例子:

//Assuming this variable:
int intValue;
intValue = 1251;

// None of these variations that I have tried work:
ctx.Database.SqlQuery<model>("StoredProc @intValue= {0}", intValue);
ctx.Database.SqlQuery<model>("StoredProc @IntValue", 1251);
ctx.Database.SqlQuery<model>("StoredProc @IntValue", new SqlParameter("@IntValue",1251);
 //And 6 or 7 others

都给我一个无用的SQL Server错误信息:

SP 附近的语法不正确

正确的语法是什么?

还不能回答我自己的问题,但我找到了答案:

在 stackoverflow 的其他地方找到了正确的语法,或者至少一个正确的语法选项——这个网站真的很棒——我几乎总是在这里找到我的答案!

var myInt = new SqlParameter("@IntVal", SqlDbType.Int);
pMeme_ck.Value = 1251;
return ctx.Database.SqlQuery<ClaimSummary>("EXEC StoredProcedureName @IntVal=@IntVal", myInt);

【问题讨论】:

  • 什么是SP?存储过程?如果是这样,请尝试EXEC SP @intValue
  • 是-但我实际上需要返回结果-不确定在这种情况下我将如何使用 exec:return ctx.Database.SqlQuery( StoredOroc @intVal= {0}", myIntVal );

标签: c# sql-server asp.net-mvc stored-procedures


【解决方案1】:

您正在对数据库执行原始 SQL 查询。您需要执行存储过程。

ctx.Database.SqlQuery<model>("EXEC StoredProc @IntValue", 1251);

更新: 您可能还想尝试执行:

ctx.<EntityType>.SqlQuery("StoredProc @IntValue", 1251);

(替换为要返回的实体的类型名称。)

这应该返回由存储过程“StoredProc”返回的EntityTypes。这个this 有限的 MSDN 文档。

【讨论】:

  • 大卫,感谢您的回复,不幸的是,这似乎也不起作用:在我得到的第一种方式上:必须声明标量变量“@intValue”第二个选项似乎不是完全有效的语法,并且不会编译。
  • 我以前从未使用过这个。如果你使用@p0 而不是@intValue,你会得到同样的错误吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2012-02-10
  • 2014-03-30
  • 2015-05-08
  • 2021-05-26
相关资源
最近更新 更多