我正在尝试从网站登录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
答案 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
}