在ASP.NET中使用SQL适配器填充数据表时出现问题

时间:2010-09-22 11:17:28

标签: c# asp.net ado.net

我有一个用户名db表,我正在尝试连接以比较用户名/通行证。

这是我的代码,它不起作用,我做错了什么?

DataTable dt = null;

protected void btn_Click_Login(object sender, EventArgs e)
{
    string query = string.Format("SELECT * FROM Users WHERE Username='{0}' AND Password='{1}'", txtUsername.Text, txtPassword.Text);

    using (SqlConnection c = new SqlConnection(ConfigurationManager.ConnectionStrings["RBConnectionString"].ConnectionString))
    {
        c.Open();

        using (SqlDataAdapter a = new SqlDataAdapter(query, c))
        {
            DataTable t = new DataTable();
            a.Fill(t);
        }
    }
    if (dt.Rows.Count > 0)
    {
        Session["Username"] = txtUsername.Text;
        Session["Password"] = txtPassword.Text;
        Response.Redirect("main.aspx");
        lblError.Text = "success";
    }
    else
    {
        lblError.Text = "Wrong Username/Password combination";
    }
} 

}

5 个答案:

答案 0 :(得分:1)

尝试创建一个SqlCommand来保存您的查询。

SqlCommand cmd = new SqlCommand(query, c);

using (SqlDataAdapter a = new SqlDataAdapter(cmd))
{
    DataTable t = new DataTable();
    a.Fill(t);
}

我不是百分之百确定这是你的问题,但是在我以前使用ADO.NET的日子里(在L2SQL / EF之前,确实是黑暗的日子),我似乎记得DataTable和SqlDataAdapter的问题。 / p>

根据我的记忆 - 您无法使用基于原始查询字符串的SqlDataAdapter填充DataTable - 您需要使用SqlCommand。但我相信这可以用DataSet完成。

因此,要么更改为SqlCommand,要么更改为DataSet。

答案 1 :(得分:1)

很可能你使用了错误的数据表来检查没有返回的行。

检查数据表的t和dt实例。

答案 2 :(得分:1)

您填写t

DataTable t = new DataTable();
a.Fill(t);

但请阅读dt

if (dt.Rows.Count > 0)

答案 3 :(得分:1)

我决定尝试数据阅读器并使其正常工作:

protected void btn_Click_Login(object sender, EventArgs e)
{

   SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["RbConnectionString"].ConnectionString);
    conn.Open();
    string queryString = "SELECT * FROM [Users] WHERE Username=@username AND Password= @password";
   SqlCommand command = new SqlCommand(queryString, conn);
   command.Parameters.AddWithValue("@username", txtUsername.Text);
   command.Parameters.AddWithValue("@password", txtPassword.Text);

   SqlDataReader reader = null;
   reader = command.ExecuteReader();

   if (reader.Read())
   {
       Session["Username"] = txtUsername.Text;
       Session["Password"] = txtPassword.Text;
       Response.Redirect("main.aspx");
   }
   else
   {
       lblError.Visible = true;
       lblError.Text = "Incorrect Username/Password Combination";
   }
    conn.Close();

}

答案 4 :(得分:0)

你得到的错误不明确。但我觉得你的联系是开放的,永远不会关闭。试试

c.Close();