自己做的登陆窗口不管我怎么登陆都是账号密码错误。
这是登陆窗口的代码
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);
------解决方案--------------------
------解决方案--------------------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+"'";
------解决方案--------------------
------解决方案--------------------不要养成拼接字符串这种习惯
用参数
至于为什么 自己百度吧
------解决方案--------------------