private void btndel_Click(object sender, System.EventArgs e)
{
string sqlco= ConfigurationSettings.AppSettings["strCon"];
 SqlConnection sqlcon=new SqlConnection(sqlco);
 string sqlstr3="delete from ReadRoom1 where ReadRoomName=@roomname";
 sqlcon.Open();
 SqlCommand cm2=new SqlCommand(sqlstr3,sqlcon);
 cm2.Parameters.Add(new SqlParameter("@roomname",SqlDbType.VarChar,20));
 cm2.Parameters["@roomname"].Value=listroom.SelectedItem.ToString();
 cm2.ExecuteNonQuery();
 sqlcon.Close();
 BindGrid();
//这里,将在querrynote1表中删除该列
string sqlstr4="alter table Querrynote1 drop column @room ";
 SqlCommand cm3=new SqlCommand(sqlstr4,sqlcon);
cm3.Parameters.Add(new SqlParameter("@room",SqlDbType.VarChar,20));
 cm3.Parameters["@room"].Value=listroom.SelectedItem.ToString();
 sqlcon.Open();
 cm3.ExecuteNonQuery();
 sqlcon.Close();
}
错误显示:cm3.Parameters["@room"].Value=listroom.SelectedItem.ToString();这里有问题,
System.NullReferenceException: 未将对象引用设置到对象的实例。但是我在注释前面的代码中都可以得到listroom.SelectedItem.ToString()的值啊,为什么一加注释后的代码就不行了
 

解决方案 »

  1.   

    cm3.Parameters["@room"].Value=listroom.SelectedItem.Value.ToString();
    改成上面的代码试试。
      

  2.   

    @room变量跟数据库中的存储过程的变量是否一致?
    这个肯定跟注释没关系的
      

  3.   

    cm2.Parameters["@roomname"].Value=listroom.SelectedItem.ToString();listroom.SelectedItem.value.ToString();
    listroom.SelectedItem.text.ToString();
      

  4.   

    不是加注释后有问题,是在加上注释后面的那些代码,就出现问题了
     rickjelly2004(rick & jelly) ( ) 信誉:100 
    我注释前面的代码里也用的是listroom.SelectedItem.ToString();,为什前面可以得到呢?后面就得不到了呢?
      

  5.   

    是不是 BindGrid();里面改东西了
    另外listroom.SelectedItem.ToString();
    要写成listroom.SelectedItem.value.ToString();或者
    listroom.SelectedItem.text.ToString();
    如果你要使用多次,最好取一次,存到string
    string str = listroom.SelectedItem.value.ToString();
    cm2.Parameters["@roomname"].Value=str;
     cm2.ExecuteNonQuery();
     sqlcon.Close();
     BindGrid();
    //这里,将在querrynote1表中删除该列
    string sqlstr4="alter table Querrynote1 drop column @room ";
     SqlCommand cm3=new SqlCommand(sqlstr4,sqlcon);
    cm3.Parameters.Add(new SqlParameter("@room",SqlDbType.VarChar,20));
     cm3.Parameters["@room"].Value=str;
     sqlcon.Open();
     cm3.ExecuteNonQuery();
     sqlcon.Close();
      

  6.   

    我把一部分代码放上来吧
    private void Page_Load(object sender, System.EventArgs e)
    { if(!IsPostBack)
     {

     BindGrid();
    }

    }
    void BindGrid()
    {
    string sqlco= ConfigurationSettings.AppSettings["strCon"];
    SqlConnection sqlcon=new SqlConnection(sqlco);
    string sqlstr="select ReadRoomName from ReadRoom1";
    SqlDataAdapter da=new SqlDataAdapter(sqlstr,sqlcon);
    DataSet ds=new DataSet();
    da.Fill(ds);
    listroom.DataSource=ds;
    listroom.DataBind();
    }    
    private void btndel_Click(object sender, System.EventArgs e)
    {
     
    string sqlco= ConfigurationSettings.AppSettings["strCon"];
              SqlConnection sqlcon=new SqlConnection(sqlco);
    string sqlstr3="delete from ReadRoom1 where ReadRoomName=@roomname";
     sqlcon.Open();
    string str=listroom.SelectedItem.Value.ToString();

    SqlCommand cm2=new SqlCommand(sqlstr3,sqlcon);
    cm2.Parameters.Add(new SqlParameter("@roomname",SqlDbType.VarChar,20));
     cm2.Parameters["@roomname"].Value=str;
     cm2.ExecuteNonQuery();
     sqlcon.Close();
     BindGrid();

     string sqlstr4="alter table Querrynote1 drop column @room ";
     SqlCommand cm3=new SqlCommand(sqlstr4,sqlcon);
    cm3.Parameters.Add(new SqlParameter("@room",SqlDbType.VarChar,20));
     cm3.Parameters["@room"].Value=str;
     sqlcon.Open();
     cm3.ExecuteNonQuery();
     sqlcon.Close();

     
    }
      

  7.   

    BindGrid()之后listroom.DataSource 改变了啊!
      

  8.   

    private void btndel_Click(object sender, System.EventArgs e)
    {
    string tem;
    string sqlco= ConfigurationSettings.AppSettings["strCon"];
     SqlConnection sqlcon=new SqlConnection(sqlco);
     string sqlstr3="delete from ReadRoom1 where ReadRoomName=@roomname";
     sqlcon.Open();
     SqlCommand cm2=new SqlCommand(sqlstr3,sqlcon);
     cm2.Parameters.Add(new SqlParameter("@roomname",SqlDbType.VarChar,20));
     cm2.Parameters["@roomname"].Value=listroom.SelectedItem.ToString();
     cm2.ExecuteNonQuery();
     sqlcon.Close();
    tem=listroom.SelectedItem.value.ToString();
     BindGrid();
    string sqlstr4="alter table Querrynote1 drop column @room ";
     SqlCommand cm3=new SqlCommand(sqlstr4,sqlcon);
    cm3.Parameters.Add(new SqlParameter("@room",SqlDbType.VarChar,20));
     cm3.Parameters["@room"].Value=tem
     sqlcon.Open();
     cm3.ExecuteNonQuery();
     sqlcon.Close();
    }