private void XPBtnLogin_Click(object sender, System.EventArgs e)
{
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("zljl.mdb");
    string strUserName = DropDownName.SelectedItem.Text;
    string strPassword = txtBoxPassword.Text;
    string strSelect = "select * from users where username='" + strUserName + "' and password='" + strPassword + "'";
    OleDbConnection Conn = new OleDbConnection(strConn);
    Conn.Open();
    OleDbCommand Command = new OleDbCommand(strSelect,Conn);
    OleDbDataReader DataReader = Command.ExecuteReader();
    if (DataReader.Read())
Response.Redirect("main.aspx");
    else
lblError.Text = "密码错误!";
    DataReader.Close();
    Conn.Close();
}_________________________________________________________________________应用程序中的服务器错误。
未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
行 80:  {
行 81:  string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("zljl.mdb");
* 行 82:  string strUserName = DropDownName.SelectedItem.Text;
行 83:  string strPassword = txtBoxPassword.Text;
行 84:  string strSelect = "select * from users where username='" + strUserName + "' and password='" + strPassword + "'";
 

解决方案 »

  1.   

    添加using System.Configuration
    修改
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(ConfigurationSettings.AppSettings("data"));在web.config中,修改为:
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="data" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DbUsed.mdb"></add>
      </appSettings>   
    </configuration>
      

  2.   

    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("zljl.mdb");
        string strUserName = DropDownName.SelectedItem.Text;
    改为:
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("zljl.mdb");
        string strUserName = "";
    if( DropDownName.SelectedItem != null  )
      strUserName += DropDownName.SelectedItem.Text;
    else
      Response.Write("<script language='javascript'>alert(\"请选择用户名\")</script>");
      

  3.   

    显然是这句错了:
    string strUserName = DropDownName.SelectedItem.Text;
    是否控件名写错了或方法不对
      

  4.   

    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("zljl.mdb");
        string strUserName = DropDownName.SelectedItem.Text;
    改为:
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("zljl.mdb");
        string strUserName = "";
    if( DropDownName.SelectedItem != null  )
      strUserName += DropDownName.SelectedItem.Text;
    else
      Response.Write("<script language='javascript'>alert(\"请选择用户名\")</script>");_________________________________________________________________________________请问为什么要这样改?我点击按钮之前选择了用户名的。
    还有改了以后提示:
    至少一个参数没有被指定值。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 至少一个参数没有被指定值。源错误: 
    行 92:  Conn.Open();
    行 93:  OleDbCommand Command = new OleDbCommand(strSelect,Conn);
    *行 94:  OleDbDataReader DataReader = Command.ExecuteReader();
    行 95:  /*if (DataReader.Read())
    行 96:    Response.Redirect("main.aspx");
     
      

  5.   

    用调试器单步跟踪运行,看看哪个object是NULL
      

  6.   

    很显然的,要么是
    DropDownName不存在。要么是
    DropDownName这个下拉列表没有选择任何一项(例如里面一项都没有)。
      

  7.   

    DropDownName里没有选项被选中。
      

  8.   

    是不是没加!IsPostBack???
    不是PostBack会触发ServerEvent?
      

  9.   

    我设置断点看了一下,发现strPassword变量有值,而strUserName变量是空值。可是我在DropDownName中选择了用户名呀(DropDownName是个DropDownList控件),难道这段代码有问题:if( DropDownName.SelectedItem != null  )
      strUserName += DropDownName.SelectedItem.Text;
    else
      Response.Write("<script language='javascript'>alert(\"请选择用户名\")</script>");可是如果DropDownName没选择值,应该弹出对话框呀!
    ——————————————————————————————————————我监视DropDownName.SelectedItem.Text时提示如下:错误:“DropDownName.SelectedItem.Text”不存在
      

  10.   

    你一定是在Page_Load中改变了DropDownName的数据源或者进行了DataBind等操作,导致它被清空了。
      

  11.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    if (!IsPostBack)
    {
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("zljl.mdb");
    string strSelect = "select * from users";
    OleDbConnection Conn = new OleDbConnection(strConn);
    Conn.Open();
    OleDbCommand Command = new OleDbCommand(strSelect,Conn);
    OleDbDataReader DataReader = Command.ExecuteReader();
    DropDownName.DataSource = DataReader;
    DropDownName.DataTextField = "name";
                      DropDownName.DataBind();
    DataReader.Close();
    Conn.Close();
    }
    }这是我的Page_Load的代码,请问有什么问题吗?
      

  12.   

    有问题。PostBack的时候还需要绑定一次数据,我记得是这样的。
      

  13.   

    需要在PostBack时重新绑定数据,具体原因不明。
      

  14.   

    需要在PostBack时重新绑定数据,具体原因不明。________________________________________________________________在PostBack时重新绑定数据,那strUserName += DropDownName.SelectedItem.Text得到的不就是空值了?
      

  15.   

    不会,回发之后,DropDownList绑定的数据会丢失,这个时候仅有SelectIndex却找不到SelectItem,好像是这样的,你何不试试看呢?
      

  16.   

    这个我无法解答,估计是因为DataReader作为数据源无法保存,我记得.NET的数据源是存在这个莫名其妙的问题的。