错误:对象引用未设置为对象的实例?

时间:2014-03-05 17:06:55

标签: c# asp.net

有一个错误,即对象引用没有设置为对象的实例,我试图使用下面的数据库中存在的电子邮件ID来比较安全问题和答案 代码

    protected void Button1_Click(object sender, EventArgs e)

{

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\keishna\Documents\Visual Studio 2010\Projects\MasterDemo\App_Data\Earth_Movers.mdf;Integrated Security=True;User Instance=True");
        con.Open();
        DataSet ds = new DataSet();
        SqlCommand cmd = new SqlCommand("SELECT Security_Question,Answer FROM Registration Where email='" + TextBox3.Text + "'", con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(ds,"data");
        //string Ans = (cmd.ExecuteReader()).ToString();
        string sq = (ds.Tables["0"]).ToString();
        string Ans = (ds.Tables["1"]).ToString();
        if (sq == TextBox3.Text && Ans == TextBox2.Text)
        {
            Response.Redirect("NewPassword.aspx?email="+TextBox3.Text);
        }
    }

但错误就在这里

**string sq = (ds.Tables["0"]).ToString();
            string Ans = (ds.Tables["1"]).ToString();**

使用此代码我将电子邮件ID作为查询字符串并将其发送到NewPassword.aspx页面,我可以在其中设置新密码并使用电子邮件ID更新此密码以更改特定列。

和NewPassword.aspx代码有一个按钮,在按钮上单击新密码应该在我的数据库的注册表和登录表中更新。

NewPassword.aspx code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;

public partial class Webpages_NewPassword : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    { 

    }
    protected void Button1_Click(object sender, EventArgs e)
    {

        SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\krishna\Documents\Visual Studio 2010\Projects\MasterDemo\App_Data\Earth_Movers.mdf;Integrated Security=True;User Instance=True");
        con.Open();
        if (Request.QueryString["email"] != null)
        {
            string Email= Request.QueryString["email"];
            SqlCommand cmd = new SqlCommand("update Registration set Password where email='" + Email + "'", con);
        }
        con.Close();

    }
}

所以请尽快给我解决方案。

谢谢和问候

Vasundara Reddy

2 个答案:

答案 0 :(得分:5)

其中一件事是null

ds
ds.Tables
ds.Tables["0"]
ds.Tables["1"]

你确定你不是这个意思吗?

ds.Tables[0]
ds.Tables[1]

答案 1 :(得分:3)

将表的索引用作int,而不是

string sq = (ds.Tables["0"]).ToString();

string sq = (ds.Tables[0]).ToString();

由于您的DataSet不包含名称为"0"的表格,因此会返回null

您的表名是"data",因为您使用了DataApter.Fill的重载,该重载采用了应该填充的表的名称。

所以这也有效:

string sq = (ds.Tables["data"]).ToString();

然而,我确定你不想要DataTable.ToString但是它的行的内容是:

DataTable data = ds.Tables["data"];
string firstQuestion = data.Rows[0].Field<string>("Security_Question");
string firstAnswer = data.Rows[0].Field<string>("Answer");