chi*_*rag 18 c# sql sql-server stored-procedures entity-framework
CREATE PROC spIsValidUser
@UserName varchar(50),
@Password varchar(50)
AS
IF Exists(SELECT * FROM Users where UserName=@UserName and Password=@Password)
BEGIN
return 0
END
ELSE
BEGIN
return 1
END
GO
Run Code Online (Sandbox Code Playgroud)
我创建了这个Stored Procedure并且Stored Procedure使用实体框架来调用它.下面是用C#编写的代码.
MyBusEntities db = new MyBusEntities();
int empQuery = db.spIsValidUser("abc", "abc@123");
Run Code Online (Sandbox Code Playgroud)
spIsValidUser Stored Procedure-1在所有情况下都返回.请告诉我错误.
编辑 - 根据给定的答案,存储过程不使用return语句,因为实体框架不能支持存储过程返回开箱即用的标量值.让我知道如何从标量数据发送Stored Procedure?
您的存储过程当前返回标量值.使用以下步骤解决此问题:
像这样更改你的存储过程(不要使用return存储过程中的关键字来返回值,实体框架不能支持存储过程返回开箱即用的标量值.但是有一个解决方法):
ALTER PROC spIsValidUser
@UserName varchar(50),
@Password varchar(50)
AS
SELECT Count(*) FROM Users where UserName= @UserName and Password= @Password
return
Run Code Online (Sandbox Code Playgroud)您需要将存储过程导入为Function.右键单击实体模型的工作区区域,然后选择Add -> Function Import.
在Add Function Import对话框中,输入您希望在模型中引用存储过程的名称,从下拉列表中选择您的过程,然后选择过程的返回值为Scalar.
最后写这样的代码:
MyBusEntities db = new MyBusEntities();
System.Nullable<int> empQuery = db.spIsValidUser("abc", "abc@123").SingleOrDefault().Value;
MessageBox.Show(empQuery.ToString());// show 1 if Exist and 0 if not Exist
Run Code Online (Sandbox Code Playgroud)编辑:我认为对存储过程返回值的支持取决于实体框架的版本.实体框架也没有丰富的存储过程支持,因为它是一个ORM,而不是SQL替代品.
您是否正确地在EF模型中导入了存储过程?你正在为存储过程设置正确的返回类型吗?
您可以为您的过程设置4种可能的返回类型可能的返回类型是:
你需要设置标量返回类型.
如果您不知道如何设置返回类型,那么这里是完整的教程http://www.binaryintellect.net/articles/30738a7c-5176-4333-aa83-98eab8548da5.aspx
快速举例.
CREATE PROCEDURE CustOrderCount
@CustomerID nchar(5)
AS
BEGIN
SELECT COUNT(*) FROM ORDERS
WHERE CUSTOMERID=@CustomerID;
END
NorthwindEntities db = new NorthwindEntities();
var count = db.CustOrderCount("ALFKI");
int ordercount = count.SingleOrDefault().Value;
Run Code Online (Sandbox Code Playgroud)
这将返回int order count.
你有没有尝试过:
CREATE PROC spIsValidUser
@UserName varchar(50),
@Password varchar(50)
AS
IF Exists(SELECT * FROM Users where UserName=@UserName and Password=@Password)
BEGIN
SELECT 0
END
ELSE
BEGIN
SELECT 1
END
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2333 次 |
| 最近记录: |