2016-08-12 7 views
0

私は3つのコンボボックスを持っています:cmbStatus、cmbReason、cmbTransfer、primarykey textbox txtNo_RMとトリガーボタン:btnAdd。 Mysqlをデータベースとして使用するコンボボックスwinformで特定のテキストを選択した場合

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", ""); 
      } 

答えて

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

前のおかげではなくTextのコンボボックスのプロパティSelectedValueを使用してください。また、cmbStatus.Text!= "Transfered"の場合は、DBNull.Valueまたはデフォルト値をパラメータ@Reason@Transferに割り当てます。

+0

SelectedValueのにプロパティを変更することも働きながら、停止デバッグの後、私は警告を取得:可能意図しない参照比較を。値の比較を取得するには、左側に 'string'と入力します –

0

あなたは5に4がそうでなければ、あなたが取得する必要がありますので、クエリで指定したように、4つのパラメータを期待して、使用しているパラメータ化クエリを考えてみましょうあなたが質問に書いたようにそのエラー。あなたはこのような状況でできることは次のとおりです。

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

私はこのコードを試してみたいと思いますが、以下は簡単な答えです。しかし、とにかく答えてくれてありがとう –

関連する問題