c#如果在组合框winform中选择了某些文本
本文关键字:选择 文本 winform 如果 组合 | 更新日期: 2023-09-27 18:01:59
我有3个组合框:cmbStatus,cmbReason,cmbTransfer, primarykey文本框txtNo_RM和触发按钮:btnAdd。使用Mysql作为数据库
当cmbStatus != "Transfered"时,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", "");
}
谢谢之前
您可以像这样使用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);
}
使用SelectedValue
属性代替Text
。也分配DBNull.Value
或默认值给参数@Reason
和@Transfer
,如果cmbStatus。= " transfer ".
考虑你正在使用的参数化查询,它期望你在查询中指定的四个参数,所以你应该五个,否则你会得到你在问题中描述的错误;在这种情况下你可以做的是:
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();