我在做毕业设计 
做到关于验证登陆的时候
建立类库方法的时候出问题了public bool checkLogin(string LoginName,string PWD,string strConn) 

string sql="select count(*)as fintLoginCount from T_Operator where "+"fchrLoginName=""+LoginName+""and fchrPassWord=""+PWD+"""; 
OleDbConnection oConn=new OleDbConnection(strConn); 
oConn.Open(); 
OleDbCommand=new OleDbCommand(sql,oConn): 
OleDbDataReader oReader=oCommand.ExecuteReader(); 
while(oReader.Read()) 

if(oReader.GetInt32(0)==0) 
{return false;} 

oReader.Close(); 
oConn.Close(); 
return true; 

 这段 bool 换成什么好?

解决方案 »

  1.   

    换成int型,不同的整数表示不同的结果。
      

  2.   

    你的代码可以SQL注入!应该这样写,我只给你写伪代码:
    string username = 用户名;
    string userpwd = 密码;
    string Sql = "select userid from tb_user where username = '" + username + "'";
    //创建DR
    if(dr.read())
    {
        Sql = "select userid from tb_user where userpwd = '" + userpwd + "' and username = '" + username + "'"
        //创建DR1
        if(dr1.read())
        {
            //登陆成功!
        }
        else
        {
             //密码错误!
        }
    }
    else
    {
        //用户名错误!
    }=================
      

  3.   

    别忘了
    dr1.close()
    dr.close()
      

  4.   

    x1234521(Server.net) 
    的貌似也能注入啊
      

  5.   

    晕死暂时先不管注入不注入
    我这里只是基于连接的情况验证哈就是到数据库中查询用户的权限
    返回 bool 值怎么改好?
      

  6.   

    x1234521(Server.net) ( ) 
    的方法我支持。你看看。
      

  7.   

    改成下面这样试一下:
    public bool checkLogin(string LoginName,string PWD,string strConn) 

    string sql="select count(*) from T_Operator where "+"fchrLoginName="+"'"+LoginName+"'"+" and "+"fchrPassWord="+"'"+PWD+"'"; 
    OleDbConnection oConn=new OleDbConnection(strConn); 
    oConn.Open(); 
    OleDbCommand oCommand=new OleDbCommand(sql,oConn);
    string LoginCount = oCommand.ExecuteScalar();
    oConn.Close();if((int.Prase(LoginCount))==0)
    return false;
    else
    return true;}
      

  8.   

    顺便我也问一下
    private void btnLogin_ServerClick(object sender, System.EventArgs e)
    {
        SqlConnection con;
    string sql;
    SqlCommand cmd;
    string id;
    con= new SqlConnection(
                    "workstation id=YANGLIN;packet size=4096;integrated security=SSPI;data source=YANGLIN;persist security info=False;initial catalog=student");
    sql="SELECT * FROM student WHERE ID='{0}'and password='{1}'"; sql=String.Format(sql,txtLogin.Value,txtPwd.Value);
    cmd = new SqlCommand(sql,con); con.Open();

    try

    id=(string)cmd.ExecuteScalar(); }
    finally
    {
    con.Close();
    }
    if(id!=null)

    FormsAuthentication.RedirectFromLoginPage(id,false);
    }
    else
    {
                    this.pnlError.Visible=true;
    this.lblError.Text="Invaid user name or password!";
    }
    }当我输入 ID 和password的时候
    浏览器告诉我 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 用户 'YANGLIN\ASPNET' 登录失败。源错误: 
    行 69:  cmd = new SqlCommand(sql,con);
    行 70: 
    行 71:  con.Open();
    行 72: 
    行 73:  try
     源文件: c:\inetpub\wwwroot\311\secure\login.aspx.cs    行: 71 堆栈跟踪: 
    [SqlException: 用户 'YANGLIN\ASPNET' 登录失败。]
       System.Data.SqlClient.ConnectionPool.GetConnection(Boolean& isInTransaction) +484
       System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction) +372
       System.Data.SqlClient.SqlConnection.Open() +384
       _311.Secure.login.btnLogin_ServerClick(Object sender, EventArgs e) in c:\inetpub\wwwroot\311\secure\login.aspx.cs:71
       System.Web.UI.HtmlControls.HtmlInputButton.OnServerClick(EventArgs e) +108
       System.Web.UI.HtmlControls.HtmlInputButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +138
       System.Web.UI.Page.ProcessRequestMain() +1277