gpt4 book ai didi

c# - 整数方法总是返回 "-1"?

转载 作者:太空狗 更新时间:2023-10-30 01:15:33 25 4
gpt4 key购买 nike

我是 ASP.net MVC 的新手,我正在尝试构建一个非常基本的登录表单,一切正常,我已经为登录方法和“添加函数导入”添加了存储过程,问题是在所有情况下它总是返回一个值“-1”。让我们来看看...

1- MovableAssetsDB.context.cs

public virtual int LoginToMovable(string userName, string password)
{
var userNameParameter = userName != null ?
new ObjectParameter("UserName", userName) :
new ObjectParameter("UserName", typeof(string));

var passwordParameter = password != null ?
new ObjectParameter("Password", password) :
new ObjectParameter("Password", typeof(string));

return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("LoginToMovable", userNameParameter, passwordParameter);
}

2- 我创建了一个名为“Data”的类来处理该方法并调用存储过程

public int Login(string username, string password)
{
using (var DBcontext = new MovableAssetsEntities())
{
int userId = DBcontext.LoginToMovable(username, password);
return userId;
}

}

3-在“主页” View 中,这里是处理登录过程的表单代码和razor代码

    @{
Layout = null;
}

@{
ViewBag.Title = "Login";
}



@{
if (IsPost)
{
string username = Request.Form["username"];
string password = Request.Form["password"];

int userId = new MovableAssets.Classes.Data().Login(username, password);

if (userId > 0)
{
<script>alert("yes");</script>

}
else
{
<script>alert("No");</script>
}
}

}

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Movable Assets</title>
<link rel="stylesheet" href="@Url.Content("~/Content/Custom/css/style.css")">
</head>

<body>
<div class="container">
<p id="home_title">Movable Assets</p>
<section id="content">
<form action="#" method="post">
<h1>Login</h1>
<div>
<input type="text" placeholder="Username" required="" id="username" name="username" />
</div>
<div>
<input type="password" placeholder="Password" required="" id="password" name="password" />
</div>
<div>
<input type="submit" value="Log in" />
</div>
</form><!-- form -->
</section><!-- content -->
</div><!-- container -->
</body>
</html>

4-存储过程

  ALTER PROCEDURE [dbo].[LoginToMovable]
@UserName nvarchar(50),
@Password nvarchar(50)
AS
BEGIN

SET NOCOUNT ON;

SELECT ID FROM Utilities.dbo.Users WHERE Utilities.dbo.Users.LogIn = @UserName AND Utilities.dbo.Users.Password = @Password
AND AppCode = '9'
END

每当我写下任何登录凭据时,我都会得到 userId 的值是 -1 有什么建议吗?!

最佳答案

存储过程的 EF 模型返回 -1,因为从 EF 调用存储过程的默认行为是返回最后一条语句修改的行数。由于最后一个语句是 SELECT,您得到 -1 因为 SELECT 不能修改行:

https://stackoverflow.com/a/2203421/1945651

为了获得程序选择的值,您需要修改模型:

  1. 打开 EF 模型的模型浏览器。
  2. Function Imports 下找到存储过程并双击它以打开其Edit Function Import 对话框。
  3. Returns a Collection Of框中,选择Scalars和您期望的类型。
  4. 单击确定,然后重新保存您的 EF 模型。

DBcontext.LoginToMovable() 现在应该返回值的集合。调用后,从集合中选择第一个元素,得到你想要的值。

关于c# - 整数方法总是返回 "-1"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37805212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com