0

我正在尝试使用 keydown 功能。我的代码已启动并正在运行,但出现了这个奇怪的错误。我正在运行一个查询,如果数据库列中的值为 MIND,则应检查单选按钮的头脑,否则 MSSL。但控制总是进入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 但仍然控制进入其他部分并且 MSSL 单选按钮激活。怎么办?

4

3 回答 3

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的攻击。

如果您正在选择 *,如果您的列顺序发生变化,您将来可能会遇到错误。

于 2013-09-10T17:50:30.923 回答
0

尝试

if (e.KeyCode == Keys.Return)

而不是Keys.Enter.


如果你写

private void txtlogin_userid_KeyDown(object sender, KeyEventArgs e)
{
    System.Diagnostics.Debug.WriteLine(e.KeyCode);
}

您将在输出窗口中看到实际代码(使用菜单打开:Debug > Windows > Output)。

于 2013-09-10T17:37:45.157 回答
0

尝试

        Convert.ToString(ds.Tables[0].Rows[0][3]) == a 

反而。

于 2013-09-10T17:40:46.490 回答