[英]C# if certain text selected in combobox winform
我有3个组合框:cmbStatus,cmbReason,cmbTransfer,主键文本框txtNo_RM和触发按钮:btnAdd。 使用Mysql作为数据库
当cmbStatus!=“已传输”时,cmbReason和cmbTransfer不会被用户选择。 问题是当我使用此代码时它不起作用
private void btnAdd_Click(object sender, EventArgs e)
{
MySqlConnection con = new MySqlConnection(MyConnectionString);
MySqlCommand cmd;
con.Open();
try
{
cmd = con.CreateCommand();
cmd.CommandText = "Insert Into tb_data(No_RM,Status,Reason,Transfer)Values(@No_RM,@Status,@Reason,@Transfer)";
cmd.Parameters.AddWithValue("@NO_RM", txtNo_Rm.Text);
cmd.Parameters.AddWithValue("@Status", cmbStatus.Text);
if (cmbStatus.Text == "Transfered")
{
cmd.Parameters.AddWithValue("@Reason", cmbReason.Text);
cmd.Parameters.AddWithValue("@Transfer", cmbTransfer.Text);
}
cmd.ExecuteNonQuery();
}
finally
{
if (con.State == ConnectionState.Open)
{
con.Close();
LoadData();
MessageBox.Show("Data Added!");
}
}
}
以上致命错误消息的代码,也使用SelectedText.ToString
尝试添加此代码,导致超出范围的错误
if (cmbStatus.Text != "Transfered")
{
cmd.Parameters.AddWithValue("@Reason", "");
cmd.Parameters.AddWithValue("@Transfer", "");
}
之前感谢
为组合框而不是Text
使用属性SelectedValue
。 如果cmbStatus.Text!=“ Transfered”,也将DBNull.Value
或默认值分配给参数@Reason
和@Transfer
。
您可以将DBValue.Null
用作空值,如下所示:
if (cmbStatus.Text == "Transfered")
{
cmd.Parameters.AddWithValue("@Reason", cmbReason.Text);
cmd.Parameters.AddWithValue("@Transfer", cmbTransfer.Text);
}
else
{
cmd.Parameters.AddWithValue("@Reason", DBNull.Value);
cmd.Parameters.AddWithValue("@Transfer", DBNull.Value);
}
考虑您正在使用的参数化查询,它期望在查询中指定四个参数。因此,您应该在四个参数中指定五个,否则您将得到如问题中所述的错误。 在这种情况下,您可以做的是:
cmd = con.CreateCommand();
if (cmbStatus.Text == "Transfered")
{
cmd.CommandText = "Insert Into tb_data(No_RM,Status,Reason,Transfer)Values(@No_RM,@Status,@Reason,@Transfer)";
cmd.Parameters.AddWithValue("@Reason", cmbReason.Text);
cmd.Parameters.AddWithValue("@Transfer", cmbTransfer.Text);
}
else
{
cmd.CommandText = "Insert Into tb_data(No_RM,Status)Values(@No_RM,@Status)";
}
cmd.Parameters.AddWithValue("@NO_RM", txtNo_Rm.Text);
cmd.Parameters.AddWithValue("@Status", cmbStatus.Text);
cmd.ExecuteNonQuery();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.