我想捕捉从c#中的sql server存储过程返回的-1、0、1值。
sql服务器:
IF EXISTS(SELECT * FROM _Users WHERE UserName = @UserName AND [Password] != @Password)
BEGIN
RETURN -1
END
IF EXISTS(SELECT * FROM _Users WHERE UserName != @UserName AND [Password] != @Password)
BEGIN
RETURN 0
END
IF EXISTS(SELECT * FROM _Users WHERE UserName = @UserName AND [Password]= @Password)
BEGIN
RETURN 1
END
c级#
我们能改变下面代码的返回值吗?只要按我所希望的做就行了?
public User getUser(string name, string password)
{
User user = null;
using (var connection = Database.GetConnection())
{
var command = new SqlCommand("SP_GetUser @UserName, @Password", connection);
command.Parameters.Add(new SqlParameter("UserName", name));
command.Parameters.Add(new SqlParameter("Password", password));
connection.Open();
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
user = new User();
user.UserId = Convert.ToInt32(reader["UserId"]);
user.userName = Convert.ToString(reader["UserName"]);
user.password = Convert.ToString(reader["Password"]);
}
}
connection.Close();
}
return user; // I want to return -1, 0, 1
}
1条答案
按热度按时间6jygbczu1#
笔记:
确保您设置了
command.CommandType = CommandType.StoredProcedure;
(并从CommandText
因为它在使用时只能是sp名称CommandType.StoredProcedure
).创建数据时,应始终指定数据类型和比例/精度(如果相关)
SqlParameter
因为可能会有意外的副作用,允许自动设置数据类型。最好的做法是完整地命名参数,包括@
,所以应该是真的
从技术上讲,存储过程的返回值是存储过程的“执行状态”。你通常会使用
OUTPUT
参数返回用户数据。然而,在我看来,你的用例是一样的好。正如@marc_s所指出的:你不应该使用
sp_
存储过程的前缀。microsoft已经保留了这个前缀供自己使用(请参见命名存储过程),并且您确实会在将来的某个时候遇到名称冲突的风险。这对存储过程的性能也不利。最好只是避免sp_
使用其他的前缀-或者根本不使用前缀!