日期:2014-05-17  浏览次数:20980 次

自己做的登陆窗口不管我怎么登陆都是账号密码错误。
这是登陆窗口的代码
private void button1_Click(object sender, EventArgs e)
  {
  string idnum = AccouTextBox.Text;
  string pas = PassTextBox.Text;
  string sqlstr = "USE gcgl SELECT yhid,yhmm FROM yh WHERE yhid='idnum'and yhmm='pas' ";
  newname.BaseFf baseff = new gogla.BaseFf();
  SqlDataReader sqlread = baseff.getread(sqlstr);

  string dd = sqlread.Read().ToString();
MessageBox.Show(dd);//这里永远出来的都是 false
  if (sqlread.HasRows)


  MessageBox.Show("登陆成功");

  else
  {

  MessageBox.Show("账户密码错误,请从新登陆");
  //AccouTextBox.Text = "";
  //PassTextBox.Text = "";


  }

有一点我确定 ,数据库一定是连上的。如果我改了上面的SQL语句会报错。
数据库中的表中也是有数据的。账号密码都是12345678
但是输进去都是账户密码错误,请从新登陆。
下面是公共的代码
class BaseFf
  {
  //SqlConnection getcon();//数据库连接函数
  //void DataCz(string Czstr);//执行SQL语句插入,删除。
  //DataSet getData(string comTex,string conn);//执行SQL语句,修改。
  //SqlDataReader getread(string sqlstr);//数据读取

  public SqlConnection getcon()
  {
  string connectstr = "Data Source=localhost; Initial Catalog=gcgl;"
  + "Persist Security Info=True; User ID=sa; Password=123456";
  SqlConnection myConn = new SqlConnection(connectstr);

  return myConn;

  }


  public SqlDataReader getread(string sqlstr)
  {

  SqlConnection sqlcon = this.getcon();

  SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon);
  sqlcon.Open();

  SqlDataReader sqlreader = sqlcom.ExecuteReader(CommandBehavior.CloseConnection);
   
  return sqlreader;
  }

求大家给我看看。

------解决方案--------------------

WHERE yhid='idnum'and yhmm='pas' ;你这里这样写就已经错了,账号永远是idnum,密码永远是pas,当字符串处理了


用占位符吧!
string sqlstr =string.Formart( "USE gcgl SELECT yhid,yhmm FROM yh WHERE yhid='{1}'and yhmm='{2}' ",idnum,pas);
------解决方案--------------------
探讨
WHERE yhid='idnum'and yhmm='pas' ;你这里这样写就已经错了,账号永远是idnum,密码永远是pas,当字符串处理了


用占位符吧!
string sqlstr =string.Formart( "USE gcgl SELECT yhid,yhmm FROM yh WHERE yhid='{1}'and yhmm='{2}' ",idnum,pas);

------解决方案--------------------
string sqlstr = "USE gcgl SELECT yhid,yhmm FROM yh WHERE yhid='idnum'and yhmm='pas' ";

出错了 textbox内的值未被引用过来 按照你的方法可以改为
string sqlstr = "USE gcgl SELECT yhid,yhmm FROM yh WHERE yhid='"+idnum+"'and yhmm='"+pas+"'";
------解决方案--------------------
探讨
string sqlstr = "USE gcgl SELECT yhid,yhmm FROM yh WHERE yhid='idnum'and yhmm='pas' ";

出错了 textbox内的值未被引用过来 按照你的方法可以改为
string sqlstr = "USE gcgl SELECT yhid,yhmm FROM yh WHERE yhid='"+idnum+"'and ……

------解决方案--------------------
不要养成拼接字符串这种习惯

用参数

至于为什么 自己百度吧
------解决方案--------------------