【问题标题】:object reference not set to an instance of an object error in asp.net [duplicate]对象引用未设置为asp.net中对象错误的实例[重复]
【发布时间】:2014-02-17 06:43:50
【问题描述】:

我有一个管理员用户..当管理员添加管理员主管并将指定主管和部门设置为计算机科学时..然后当管理员再次添加帐户并尝试添加管理员并设置他的指定主管和部门计算机科学然后在这里我想显示错误“指定已经存在”..因为每个部门都有一位主管,一位经理和一位高级经理..不是多个主管,经理 我试试这个 sp 和代码.. sp

ALTER procedure [dbo].[spadmindesig]
@DesigID int
as
if exists(select * from Designation where DesigID=@DesigID)
        return -1
 else
        return 1

对于管理员注册

ALTER procedure [dbo].[spadminreg]
@UserName nvarchar(50),
@Password nvarchar(50),

@UserTypeID int,
@DepID int,
@DesigID int,
@emailaddress nvarchar(50),
@PhoneNumber nvarchar(50)

as
if EXISTS(SELECT 1  from Designation where DesigID=@DepID)
begin
select @DesigID as 'SuperVisor'
end
else if EXISTS (select 2 from Designation where DesigID=@DesigID)
begin
select @DesigID as 'Manager'
end
 else if EXISTS (select 3 from Designation where DesigID=@DesigID)
begin
select @DesigID as 'Senior Manager'
end
 else
if exists(select * from Designation where DesigID=@DesigID)
        return -1
 else
        return 1

insert into [Userss](UserName,Password,UserTypeID,DepID,CreateDate,DesigID,Email ,PhoneNumber)
values
(@UserName,@Password,@UserTypeID,@DepID,GETDATE(),@DesigID,@emailaddress,@PhoneNumber)

代码

public void AdminSignUp(string Username, string Password, int UserTypeID, int DepID, int desigid, string emailaddress, string PhoneNumber)
{

    db.ExecuteScalar("spadminreg", new object[] { Username, Password, UserTypeID, DepID, desigid, emailaddress, PhoneNumber });

}

public string Admindes( int desigid)
{

     string val=db.ExecuteScalar("spadmindesig", new object[] {  desigid }).ToString();
     return val;
}

按钮代码

protected void Btn_SignUp_Click(object sender, EventArgs e)
{


    try
    {
        //test
       //value = adminsignup.Admindes(Convert.ToInt32(DropDownList2.SelectedValue));
         string val= adminsignup.Admindes(Convert.ToInt32(DropDownList2.SelectedValue));

        if(val=="1")
        {
        adminsignup.AdminSignUp(nametxt.Value, passtxt.Value, Convert.ToInt32(DropDownList1.SelectedValue), Convert.ToInt32(DropDownList2.SelectedValue), Convert.ToInt32(DropDownList3.SelectedValue), mailtxt.Value, numbtxt.Value);
        //GridView1.DataSource=ca.viewadmin();
        Lbe6.Visible = true;
        Lbe6.Text = ("Designation Already Exists.");
        //  GridView1.DataBind();
        }
        else
        {
            lbe5.Visible = true;

             lbe5.Text = ("");

         }
    }
    catch
    {
        lbe5.Visible = true;

       lbe5.Text = ("SIGNUP FAILED.PLEASE TRY AGAIN");

    }
    nametxt.Value = "";
    passtxt.Value = "";

    mailtxt.Value = "";
    numbtxt.Value = "";

}

主管帐户存在于表中,当我添加主管帐户并设置相同的指定和部门时,它会显示错误“注册失败”,我想显示错误“指定已存在”,当我从表中删除现有主管帐户时然后我再次添加主管帐户,然后它显示错误..

object reference not set to an instance of an object

【问题讨论】:

  • 最常见的原因是某些对象或数组索引不存在,尝试设置调试点,以便您逐步了解发生了什么(设置调试点,使用 F10 或 F11键一步步移动)
  • 请包括完整的堆栈跟踪,包括行号 - 并指出这些行引用的代码中的哪些行。
  • 为什么将 ExecuteScalar 的结果转换为字符串,然后将该值与 "1" 进行比较 - 只需将其作为整数返回或更好,然后将结果的比较结果返回到 1 并返回比较的布尔结果。
  • NullReferenceException 的几乎所有情况都是相同的。请参阅“What is a NullReferenceException in .NET?”获取一些提示。

标签: c# asp.net nullreferenceexception


【解决方案1】:

打个断点调试一下,就可以准确找到错误了。

原因:

  • 为任何变量赋值为 null。

检查你的代码行到底哪里出错了

示例: DropdownList1.SelectedItem 是 null ,所以这个错误来了

【讨论】:

  • 捕获中出现错误..
  • 去掉try和catch block.put断点并尝试
【解决方案2】:

我认为您的下拉值在 Int32 中不可转换

if(DropDownList2.SelectedIndex > 0)
{
    string val= adminsignup.Admindes(Convert.ToInt32(DropDownList2.SelectedValue.ToString()));
}

【讨论】:

  • 它显示了同样的错误
  • 首先你需要检查条件然后赋值,例如 if(DropDownlist2.SelectedIndex>0) { Assignment}
  • 我不明白你的意思
  • @MehulBhalala 检查帮助按钮以格式化您的答案。您不需要
    或任何其他标签。
猜你喜欢
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
相关资源
最近更新 更多