我正在尝试使用keydown功能。我的代码启动并运行但是我收到了这个奇怪的错误。我正在运行一个查询,如果在数据库列中的值是MIND那么应该检查radiobutton头脑,否则MSSL.but控件总是进入else部分,无论数据库中的值是MIND还是MSSL。 以下是我的代码
private void txtlogin_userid_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (sender is TextBox)
{
TextBox txb = (TextBox)sender;
dc.SelectCommand = new SqlCommand("select * from UserMaster where UserID='" + txb.Text + "'", sc);
dc.Fill(ds);
dg.DataSource = ds.Tables[0];
txtlogin_name.Text = ds.Tables[0].Rows[0][1].ToString();
txtlogin_mailid.Text = ds.Tables[0].Rows[0][2].ToString();
MessageBox.Show(ds.Tables[0].Rows[0][3].ToString());
string a = "MIND";
if (ds.Tables[0].Rows[0][3].ToString() == a)
{
radiomind.Checked = true;
}
else
{
radioMSSL.Checked = true;
}
}
}}
当我在数据库中输入任何具有MIND作为其值的数字时,消息框显示MIND但仍然控制进入else部分并且MSSL单选按钮激活。该怎么办?
答案 0 :(得分:1)
在每个收音机上放一个断点[...]。检查过,它真的进入了其他地方吗?也许单选按钮变量名称是错误的。也许单选按钮正在其他地方重置。
if (ds.Tables[0].Rows[0][3].ToString() == a)
{
MessageBox.Show("mind");
radiomind.Checked = true;
}
else
{
MessageBox.Show("mssl");
radioMSSL.Checked = true;
}
检查您要比较的每个字符串的确切值。他们有额外的空间,角色吗?有时字符串可以有额外的空格。
MessageBox.Show("[" + ds.Tables[0].Rows[0][3].ToString() + "]");
MessageBox.Show(ds.Tables[0].Rows[0][3].ToString().Length);
MessageBox.Show("[" + a + "]");
MessageBox.Show(a.Length);
旁注
就像Quibblesome所说,你应该使用SqlParameters因为你容易受到sql-injections的攻击。</ p>
如果您正在选择*,如果您的columsn顺序发生变化,您可能会遇到错误。
答案 1 :(得分:0)
尝试
if (e.KeyCode == Keys.Return)
而不是Keys.Enter
。
如果你写
private void txtlogin_userid_KeyDown(object sender, KeyEventArgs e)
{
System.Diagnostics.Debug.WriteLine(e.KeyCode);
}
您将在“输出”窗口中看到实际代码(使用菜单打开:Debug&gt; Windows&gt; Output)。
答案 2 :(得分:0)
尝试
Convert.ToString(ds.Tables[0].Rows[0][3]) == a
相反。