问题描述
权限表如下IDsysuserpasswordsave_1calculate_1input_11001abc1112002bac1103003cab1004004cba000(其中save_1calculate_1input_1表示主窗体中的按钮,0或1表示能用与否)privatevoidbutton1_Click(objectsender,EventArgse)//登录按钮{LinkDataBase.Open();stringusername=this.textBox1.Text;stringpassword=this.textBox2.Text;stringselectsql="select*from用户权限wheresysuser='"+username+"'andpassword='"+password+"'";SqlCommandcmd=newSqlCommand(selectsql,LinkDataBase.Connection);cmd.CommandType=CommandType.Text;SqlDataReadersdr;sdr=cmd.ExecuteReader();if(sdr.Read()){boolenabled2=Convert.ToBoolean(sdr["save_1"]);boolenabled3=Convert.ToBoolean(sdr["calculate_1"]);boolenabled4=Convert.ToBoolean(sdr["input_1"]);//问题可能出在这三行,我不确定sdr返回值FrmMainfrmMain=newFrmMain(enabled2,enabled3,enabled4);//重载主窗体函数publicFrmMain(boolenabled2,boolenabled3,boolenabled4):this(){this.button2.Enabled=enabled2;this.button3.Enabled=enabled3;this.button4.Enabled=enabled4;}sdr.Close();FrmMain.isRunMain=true;frmMain.Show();this.Close();}else{if(MessageBox.Show("输入用户密码有误,是否重新登录","输入有误",MessageBoxButtons.OKCancel,MessageBoxIcon.Question)==DialogResult.OK){this.textBox1.Clear();this.textBox2.Clear();}else{Application.Exit();}}}其他都没出问题,就是我把enabled都改成false三个按钮依然可用!!!!!哪位前辈救救我
解决方案
解决方案二:
我已经没分了急求解决方案
解决方案三:
单步调试下,你的FrmMain窗体load事件是否对三个button的Enabled属性又重新赋值了呢?
解决方案四:
我觉得是你if(sdr.Read()){}函数体里面的内容没有执行。boolenabled4=Convert.ToBoolean(sdr["input_1"]);当你这个sdr["input_1"]的值为0或者1时,转换会出问题。程序直接接崩了。所以估计if的函数体里面并没有执行
解决方案五:
引用3楼xiaoguidangjiajia的回复:
我觉得是你if(sdr.Read()){}函数体里面的内容没有执行。boolenabled4=Convert.ToBoolean(sdr["input_1"]);当你这个sdr["input_1"]的值为0或者1时,转换会出问题。程序直接接崩了。所以估计if的函数体里面并没有执行
为什么转换会出问题?那要怎么解决呢?请指教
解决方案六:
引用4楼teddy169的回复:
Quote: 引用3楼xiaoguidangjiajia的回复:
我觉得是你if(sdr.Read()){}函数体里面的内容没有执行。boolenabled4=Convert.ToBoolean(sdr["input_1"]);当你这个sdr["input_1"]的值为0或者1时,转换会出问题。程序直接接崩了。所以估计if的函数体里面并没有执行为什么转换会出问题?那要怎么解决呢?请指教
我主窗体是可以正常显示的,用户名密码正确就可以登陆,只是权限区分不开,所有按钮4个用户号都能用
解决方案七:
Convert.ToBoolean()本身有多个重载。sdr["save_1"])本身是个字符串。当ToBoolean参数为string的时候,只有“true”和"false"两种值可以转换成功。当然你可以先把sdr["save_1"])转换为int:boolenabled4=Convert.ToBoolean(Int32.Parse(sdr["input_1"]));