我有3个组合框:cmbStatus,cmbReason,cmbTransfer,primarykey textbox 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", "");
}
之前感谢
答案 0 :(得分:0)
将属性SelectedValue
用于组合框而不是Text
。如果cmbStatus.Text!=“已转移”,还可以为参数DBNull.Value
和@Reason
分配@Transfer
或默认值。
答案 1 :(得分:0)
您可以将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);
}
答案 2 :(得分:0)
考虑您正在使用的参数化查询,它期望您在查询中指定的四个参数所以您应该五个四个,否则您将得到问题中描述的错误;在这种情况下你可以做的是:
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();