存储过程:
ALTER proc User_Login_1
@UserID nchar(10),
@Password char(20),
@Return int=0 output
as
declare @flag int
select @flag=count(*) from [table]  
where @UserID=name and @Password=password
if @flag>0
begin
  select @Return=1   
end  连接数据库:
SqlConnection con = dbobj.GetConnection();   
  SqlCommand com = new SqlCommand();
  com.Connection = con;
  con.Open();
  com.CommandType = CommandType.StoredProcedure;
  com.CommandText = "User_Login_1";
  com.Parameters.Add("@UserID", SqlDbType.NChar, 10).Value = user_text.Text.Trim();
  com.Parameters.Add("@Password", SqlDbType.Char, 20).Value = password.Text.Trim();
  com.Parameters.Add("@Return", SqlDbType.Int).Direction =ParameterDirection.Output;   
  com.ExecuteNonQuery();
  int i =Convert.ToInt32(com.Parameters["@Return"].Value);  
  if (i>0)
  {
  Response.Write("<script language=javascript>alert('登陆成功');</script>");
  }
  else
  {
  Response.Write("<script language=javascript>alert('登陆不成功');</script>");
  }
  con.Close();
这里int i =Convert.ToInt32(com.Parameters["@Return"].Value); 为什么会出现对象不能从 DBNull 转换为其他类型的错误?

解决方案 »

  1.   

    int i =Convert.ToInt32(com.Parameters["@Return"].Value==null?0:com.Parameters["@Return"].Value); 
    楼下那小子以为抢到沙发了。
      

  2.   

    com.Parameters["@Return"].Value为null,或者""都可能发生错误
    改写一下你的存储过程吧ALTER proc User_Login_1
    @UserID nchar(10),
    @Password char(20),
    @Return int=0 output
    as
    --declare @flag int
    if exists(select 1  from [table]  where name= @UserID and password=@Password) 
     begin
      select @Return=1   --存在此用户名与密码
     end  
    else 
     begin
      select @Return=0  
     end 
      
      

  3.   

    建议楼主打个断点看一下com.Parameters["@Return"].Value的值如果是返回值的问题,楼主就应该知道怎么改了.另外三楼的逻辑判断好标准啊......因该学习..
      

  4.   

    field fld;
    if(field==dbnull.value)
    {}
    else
    {}