这是我的第一篇博客,前两天在写验证用户登录时,遇到了一个DBNull异常。在网上查了一下,原来是在数据库中空操作引起的异常,于是找到了一篇文章跟我的问题差不多

文章出处:http://www.diybl.com/course/4_webprogram/asp.net/netjs/200855/113099.html

    

 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.Int4);
            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();
                }
          
            
        }

 

 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       //(我本人认为这个地方是错误的,应为@@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();
                }
            }

 

 

 

相关文章: