使用asp.net中的Web服务登录网站表单

时间:2013-12-21 13:44:52

标签: c# asp.net

我正在尝试从网站登录Web服务。我有一个带有USERS(id,user,pass,int admin)的访问数据库(如果是,则为1,如果不是则为0)。 在Web服务中,我有这个webmethod:

[WebMethod]
public DataSet login(string u, string p)
{
    OleDbConnection CNN = null;
    OleDbCommand CMD = null;

    string sql = "select * from users where username ='" + u + "' and pass='" + p + "' ";

    CNN = new OleDbConnection(conn);
    CMD = new OleDbCommand(sql, CNN);
    CMD.Connection.Open();

    OleDbDataAdapter adapter = new OleDbDataAdapter(CMD);
    DataSet ds = new DataSet();
    adapter.Fill(ds, "logged");

    CNN.Close();
    return ds;
}

而且,在网站上我有这段代码:

protected void Button1_Click(object sender, EventArgs e)
{
    db.Service Login = new db.Service();

    Login.login(lUser.Text, lPass.Text);
}

所以我的问题是如何查看记录的用户是否为admin?

我想以某种方式从DataSet ds中读取它 - 因为它充满了我需要的所有信息,但是如何做到这一点?

谢谢, dnisko

1 个答案:

答案 0 :(得分:4)

首先,请避免使用sql字符串直接将用户输入的值传递给数据库。您对SQL注入攻击持开放态度,并且也容易出错

//Parametrize your following query.
string sql = "select * from users where username ='" + u + "' and pass='" + p + "' "; 

Here is an example on how to parametrize OleDbCommand.

回答您的问题:

您的login()方法会返回DataSet个对象,因此您需要将login()方法的返回值分配给DataSet

db.Service Login = new db.Service();

DataSet ds = Login.login(lUser.Text, lPass.Text);

bool isAdmin = false;

//Check if there is a record for the username and password
if(ds.Tables[0].Rows.Count == 1)
{
    //now check if user is an admin or not
    isAdmin = Convert.ToBoolean(ds.Tables[0].Rows[0]["admin"]);

    if(isAdmin)
    {
        //User is an admin
    }

}else{

   //User does not exist in the database
}