2016-08-12 37 views
0

我有3个组合框:cmbStatus,cmbReason,cmbTransfer,primarykey文本框txtNo_RM和触发按钮:btnAdd。使用Mysql作为数据库C#如果在组合框winform中选择某些文本

虽然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

可以使用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); 
} 
+0

简单和工作,谢谢! –

0

使用属性SelectedValue的组合框,而不是Text。如果cmbStatus.Text!=“已转移”,也将DBNull.Value或默认值分配给参数@Reason@Transfer

+0

而改变属性的SelectedValue也适用,停止调试后,我得到一个警告:可能出现的意外参考比较;得到一个价值比较,投左手键入'字符串' –

0

考虑您正在使用参数化查询,因为你在查询中指定所以,你应该5四,否则你会得到它希望四个参数你在问题中描述的那个错误;你能在这种情况下做的是:

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(); 
+0

虽然我想试试这个代码,下面提供一个简单的答案。但无论如何感谢回答 –