本帖最后由 qindan267 于 2010-05-07 23:27:13 编辑

解决方案 »

  1.   

    这段代码
    if (Convert.ToInt32(sqlcom.ExecuteScalar()) > 0)
      {
      Page.Response.Redirect("Default.aspx");  }
    改成下面的SqlDataAdapter sda = new SqlDataAdapter(sqlcom);
                DataTable dtab = new DataTable();
                sda.Fill(dtab);
    if(dtab.Rows.count>0)
    {
      Page.Response.Redirect("Default.aspx");
    }
    试下。
      

  2.   

    count的c好象是大写。都试下吧。。
      

  3.   

    if (Convert.ToInt32(sqlcom.ExecuteScalar()) > 0)=================尽量避免用这种不爽的代码,直接select top 1 * 到datatable中,直接判断datatable的行数
      

  4.   

    根据你select中的代码,sqlcom.ExecuteScalar()你这里得到的是一个用户名,怎么能转换成int呢?
      

  5.   

    ExecuteScalar()获取的是结果集第一行第一列的字段值,也就是你select出来的第一个用户记录的用户名,因此不能转成int。
      

  6.   

    if (Convert.ToInt32(sqlcom.ExecuteScalar()) > 0)
    改为
    if(!string.IsNullOrEmpty(sqlcom.ExecuteScalar()))
      

  7.   

    if (Convert.ToInt32(sqlcom.ExecuteScalar()) > 0)这个返回的是第一行第一列的值。可能是你第一列值不是int类型。当为string的时候。会出问题的
      

  8.   

    sqlcom.CommandText = "select count(1) from family where uname='" + txtUserName.Text + "' and pwd='" + txtPassword.Text + "'";
      

  9.   

    呵呵,我是生手,对.net还不是很熟悉,谢谢大家的帮助,你们好热情呀
      

  10.   

    改成你说的那样的话又提示错误是没有包含count的定义,晕哦
      

  11.   


    如果像你这样做的话提示的错误是与“string.IsNullOrEmpty(string)”最匹配的重载方法具有一些无效参数和无法从“object”转换为“string”  唉,困扰了很久的问题怎么才能解决呢
      

  12.   


    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Text;
    using System.Data.SqlClient;public partial class login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {      
        }
        
        protected void imgButtonLogin_Click(object sender, ImageClickEventArgs e)
        {
            Session["uname"] = txtUserName.Text.Trim();
            clsDB db = new clsDB();
            SqlConnection con = new SqlConnection(db.connectionString());
            con.Open();
            SqlCommand sqlcom = con.CreateCommand();
            sqlcom.CommandText = "select count(1) from family where uname='" + txtUserName.Text + "' and pwd='" + txtPassword.Text + "'";
            if (Convert.ToInt32(sqlcom.ExecuteScalar()) > 0)
            {
                Page.Response.Redirect("Default.aspx");        }
            else
            {
                Response.Write("<script language=javascript>alert('用户名或密码有误!!');location='javascript:history.go(-1)'</script>");
                return;
            }        con.Close();
        }
        protected void txtUserName_TextChanged(object sender, EventArgs e)
        {    }
    }
    这就是运行没有提错的代码
      

  13.   

    调用的方法用错了
    ExecuteScalar的到的是结果表的第一行第一列的值,
    按你的sql,应该是个string
    所以会exception
      

  14.   

    用这样来判断,比较方便,还能有效读取登录成功用户的相关信息。个人总结的哦
    protected void imgButtonLogin_Click(object sender, ImageClickEventArgs e) 

        //Session["uname"] = txtUserName.Text.Trim();登录成功后再记录 
        clsDB db = new clsDB(); 
        SqlConnection con = new SqlConnection(db.connectionString()); 
        con.Open(); 
        SqlCommand sqlcom = con.CreateCommand(); 
        
        sqlcom.CommandText = ("select * from family where uname='" + txtUserName.Text + "' and pwd='") + txtPassword.Text + "'"; 
        
        
        //终点在下面这个语句******************************* 
        SqlDataReader sqldr = sqlcom.ExecuteReader(); 
        //终点在上面这个语句******************************* 
        
        if (sqldr.Read()) { 
            //如果sql语句读到了匹配的记录,则sqldr.Read()返回True 
            Session["uname"] = txtUserName.Text.Trim(); 
            //此时记录登录的用户名 
            //上面这个语句还可以这样写 Session["uname"] = sqldr.Item("uname") 获取读到的数据表记录的 uname 字段的值。 同样可以获取该用户的其它信息。
            
            
            
            Page.Response.Redirect("Default.aspx"); 
        } 
        else { 
            Response.Write("<script language=javascript>alert('用户名或密码有误!!');location='javascript:history.go(-1)'</script>"); 
            return; 
        } 

      

  15.   

    上面的注释中写错了一个:
    " //上面这个语句还可以这样写 Session["uname"] = sqldr.Item("uname") 获取读到的数据表记录的 uname 字段的值。 同样可以获取该用户的其它信息"中的代码应是: Session["uname"] = sqldr.Item["uname"];
      

  16.   

    设个断点在 Page.Response.Redirect("Default.aspx");
    看看sqlcom.ExecuteScalar())里的值是多少??