对象不能从 DBNull 转换为其他类型

对象不能从 DBNull 转换为其他类型。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidCastException: 对象不能从 DBNull 转换为其他类型。
        public string  Login(string ManagerName, string ManagerPassword)
        {
            SqlConnection myConnection = con.GetSqlConnection();
            SqlCommand myCommand = new SqlCommand("ManangerLogin", myConnection);
            myCommand.CommandType = CommandType.StoredProcedure;

            SqlParameter parameterManagerName = new SqlParameter("@ManagerName",SqlDbType.NVarChar,50);
            parameterManagerName.Value = ManagerName;
            myCommand.Parameters.Add(parameterManagerName);

            SqlParameter parameterManagerPassword = new SqlParameter("@ManagerPassword",SqlDbType.NVarChar,50);
            parameterManagerPassword.Value=ManagerPassword;
            myCommand.Parameters.Add(parameterManagerPassword);

            SqlParameter parameterManagerID = new SqlParameter("@ManagerID", SqlDbType.Int, 4);
            parameterManagerID.Direction = ParameterDirection.Output;
            myCommand.Parameters.Add(parameterManagerID);

            myConnection.Open();
            myCommand.ExecuteNonQuery();
            myConnection.Close();


                int managerId = Convert.ToInt16(parameterManagerID.Value);//运行到这里时出错!
                if (managerId == 0)
                {
                    return null;
                }
                else
                {
                    return managerId.ToString();
                }
         
           
        }

所调用的存储过程:

alter PROCEDURE ManangerLogin
(
  @ManagerName nvarchar(50),
  @ManagerPassword nvarchar(50),
  @ManagerID int output
)
AS
BEGIN
select @ManagerID=ManagerID
from Manager
where ManagerName=@ManagerName and ManagerPassword=@ManagerPassword
if @@RowCount<0
select
@ManagerID=0
END
GO

原因:parameterManagerID.Value返回的值是 DBNull,也就是说相当于数据库单元格中什么值也没有,事先判断这种情况

代码改为:


            if (Convert.IsDBNull(parameterManagerID.Value))//对返回dbnull进行判断
            {
                return null;

            }
            else
            {
                int managerId = (int)(parameterManagerID.Value);
                if (managerId == 0)
                {
                    return null;
                }
                else
                {
                    return managerId.ToString();
                }
            }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值