0

我有一个表单,其中包含三个文本框,即 ID、名称、地址。

在 id 上使用 textchanged 事件时,当我输入 id(1,2,3,...) 时,名称和地址字段会自动从数据库中填充。我这样做了,但是当我按下退格键时,视觉工作室会触发异常。

当我按退格键时,我希望它像正常退格键一样。我怎样才能做到这一点?

请帮助我。

void showData1()
{
    con = new SqlConnection("Data Source=lakhe-pc;Initial Catalog=samplepractice;Integrated Security=True");
    con.Open();
    cmd = con.CreateCommand();
    cmd.CommandText = "spShowCustomer1";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("id", SqlDbType.Int);
    cmd.Parameters["id"].Value = txtId.Text;
    adap = new SqlDataAdapter(cmd);
    ds = new DataSet();
    adap.Fill(ds, "customer");
    txtName.Text = ds.Tables[0].Rows[0].ItemArray[0].ToString();
    txtAddress.Text = ds.Tables[0].Rows[0].ItemArray[1].ToString();
    cmd.ExecuteNonQuery();

    con.Close();
}

private void txtId_TextChanged(object sender, EventArgs e)
{            
    try
    {
        showData1();
    }
    catch
    {
        MessageBox.Show("Something unexpected happened.Please be patient.");
        txtId.Clear();
        txtName.Clear();
        txtAddress.Clear();
    }
    finally
    {           
    }
}
4

2 回答 2

0

showData1()当文本框为空时,不应调用该方法。

1例如,当您在文本框中输入并按下该Backspace键时,文本框将变为空并TextChanged引发事件。您应该检查这种情况:

private void txtId_TextChanged(object sender, EventArgs e)
{            
    if (!string.IsNullOrWhiteSpace(txtId.Text))
        showData1();
    //...
}
于 2013-04-28T05:49:05.677 回答
0

会计。你的例外

Failed to convert parameter value from a String to a Int32.

我想你的问题在这里

cmd.Parameters.Add("id", SqlDbType.Int);
cmd.Parameters["id"].Value = txtId.Text;

您告诉参数是 Int 类型并提供文本值。

而是试试这个(不要忘记对 String Null 或 Empty 进行一些检查)。

cmd.Parameters.Add("id", SqlDbType.Int);
cmd.Parameters["id"].Value = Convert.ToInt32(txtId.Text);
于 2013-04-28T05:53:31.043 回答