ExecuteScalar()方法工作不正常
本文关键字:工作 不正常 方法 ExecuteScalar | 更新日期: 2023-09-27 18:25:30
我有以下函数;
public int GetLoginClaim(IsValidLogin Obj)
{
SqlConnection DBCon = new SqlConnection(ConString);
SqlCommand CmdSelect = new SqlCommand("IsValidLogin", DBCon);
CmdSelect.CommandType = CommandType.StoredProcedure;
DBCon.Open();
try
{
CmdSelect.Parameters.AddWithValue("@UserName", Obj.Username);
CmdSelect.Parameters.AddWithValue("@Password", Obj.Password);
return (int)CmdSelect.ExecuteScalar();
}
catch
{
throw;
}
finally
{
CmdSelect.Dispose();
DBCon.Close();
DBCon.Dispose();
}
}
以及它所依赖的以下存储过程;
USE [SMania]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[IsValidLogin]
@UserName varchar(32),
@Password varchar(32)
As
if exists(Select * From NewClientTB Where UserName = @UserName And Password = @Password)
return(1)
else
return(0)
存储过程在sql server上执行时工作正常,但当从我上面发布的函数调用时,它会出错。以上功能在我的数据访问层中。因此,在堆栈跟踪中,我在上面的函数上出现了以下错误:NullReferenceException:对象引用未设置为对象的实例。有人能解决这个问题吗?
对于返回状态为的SP,您需要不同的方法
查看MSDN文章中的示例http://msdn.microsoft.com/en-us/library/ms378371(v=sql.90).aspx
如果要使用ExecuteScalar
,则需要将SP中的return(X)
替换为select X
,因为它"返回结果集中第一行的第一列",但SP唯一返回值中没有结果集。
这就是您如何在C#中获得退货状态
CmdSelect.Parameters.AddWithValue("@UserName", Obj.Username);
CmdSelect.Parameters.AddWithValue("@Password", Obj.Password);
var return_state = CmdSelect.Parameters.Add("@ReturnVal", SqlDbType.Int);
return_state.Direction = ParameterDirection.ReturnValue;
CmdSelect.ExecuteNonQuery();
return (int)return_state.Value;