日期:2014-05-18  浏览次数:20897 次

有句代码不懂请高手指点一二
private bool ValidLogin(string username, string password)
  {
  //数据库放到项目目录/bin/debug 目录下
  bool result = false;
  OleDbConnection cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\毕业设计.mdb");
  string strSql = "select * from 登陆表 where uID = @uid and pwd = @pwd";
  OleDbCommand cmd = new OleDbCommand(strSql, cn);
  cmd.Parameters.AddWithValue("@uid", tbx_uId.Text);
cmd.Parameters.AddWithValue("@pwd", tbx_pwd.Text);//这里不太懂请高手指教
  cn.Open();
  OleDbDataReader dr = cmd.ExecuteReader();
  if (dr.HasRows)
  {
  result = true;
  }
  cn.Close();
  return result;
  }


------解决方案--------------------
把你的两个textbox的内容传入到这两个参数中去。
------解决方案--------------------
就是给@uid和@pwd传值
select * from 登陆表 where uID = ‘tbx_uId.Text’ and pwd = ‘tbx_pwd.Text’了
------解决方案--------------------
你可以到msdn上去找找关于 sqlcommand 对Parameters更详细的解释。。其实这也没什么了解的。。。总之一句话,添加参数到cmd中去用来执行那个sql语句。。。
------解决方案--------------------
Parameters参数集合,Parameters.AddWithValue()表示增加一个参数到这个集合中,在这里的目的是用来对sql语句传入两个参数进行查询。如果存在这条记录,说明登录成功!
------解决方案--------------------
cmd.Parameters.AddWithValue("@uid", tbx_uId.Text); 
cmd.Parameters.AddWithValue("@pwd", tbx_pwd.Text);

就是
@uid = tbx_uId.Text
@pwd = tbx_pwd.Text
------解决方案--------------------
就如执行存储过程,将sql传入值变量化,能有效解决sql语句中含有转移字符的作用。
------解决方案--------------------
楼上说的都没错,另外再补充一点
OleDbCommand cmd = new OleDbCommand(strSql, cn); 
cmd.Parameters.AddWithValue("@uid", tbx_uId.Text); 
cmd.Parameters.AddWithValue("@pwd", tbx_pwd.Text);
通过cmd.Parameters.AddWithValue("@uid", tbx_pwd.Text);传递的参数,在执行数据库命令的过程中可以过滤
用户输入的数据中的敏感符号,比如"<",">"等等,防止用户SQL注入式攻击!
------解决方案--------------------
探讨
Parameters参数集合,Parameters.AddWithValue()表示增加一个参数到这个集合中,在这里的目的是用来对sql语句传入两个参数进行查询。如果存在这条记录,说明登录成功!

------解决方案--------------------
赞同
------解决方案--------------------
赞同