2012-05-03 21 views
-2
int dose = Convert.ToInt16(DoseTextBox.Text.ToString()); 
      try 
      { 
       SqlCommand AddMed = new SqlCommand("INSERT INTO Medications VALUES(@Medication,@Dose,@manufacture)", mcs); 

       AddMed.Parameters.Add("@Medication", SqlDbType.NVarChar).Value = MedName.Text.ToString(); 
       AddMed.Parameters.Add("@Dose", SqlDbType.Int).Value = dose; 
       AddMed.Parameters.Add("@manufacture", SqlDbType.NVarChar).Value = ManuDB.Text.ToString(); 

       mcs.Open(); 
       AddMed.ExecuteNonQuery(); 
       mcs.Close(); 

       MessageBox.Show("Med Added", "Done!"); 
      } 
      catch (Exception) 
      { 
       MessageBox.Show("Oops!", "Something went wrong"); 
      } 

何か間違っていますか?この関数の結果は「メッド追加」ですが、薬のテーブルには、私が + RINSERT INTO失敗

アムCtrlキーをクエリを実行したりを使用して結果を更新した回数に関係なく、任意の新しい行を持っていないように思えません。私は何かを欠いている?戻り値からToStringメソッドを削除しようとしましたが、それは問題ではありません。私は信じている。 ManuDBはメーカードロップボックスです。

+0

変更をコミットしようとしましたか? – Uflex

+0

あなたはどのRDBMSを使用していますか?私が思い出す限り、ORACLE(たとえば)ではトランザクションを明示的に 'COMMIT'する必要があります。 – MatBailie

+0

@Uflex commit?クエリを実行することを意味しますか?私はまた、SqlDataAdapterを使用しようとしましたが、それも失敗するように見えました。だから、私が知っている可能な解決策から本当に外れています。 –

答えて

1

複数の列がある場合は、3つの列があります。それから私は、挿入部分があるべきだと思う:

INSERT INTO Medications(Medication,Dose,manufacture) 
VALUES(@Medication,@Dose,@manufacture) 
+0

私は実際には主キーとしてのMedID int identityを持っています。私は思うように、私はそれに挿入できませんので、投薬、用量、製造に挿入します。 –

+0

そのため、これらの列を指定する必要があります。上記の答えと同様 – Arion

+0

@Arion:主キー列がIDENTITY列の場合、SQL Serverはそれをスキップします。読みやすさと、今後クエリーで参照される列の間に余分な列が追加されるのを防ぐために、列名を指定することは良い習慣です。 – weenoid

1

SqlCommand AddMed = new SqlCommand("INSERT INTO Medications VALUES(@Medication,@Dose,@manufacture)", mcs);聖霊降臨祭尋問ポイントで@Variableを交換してみてください、このように(?):

SqlCommand AddMed = new SqlCommand("INSERT INTO Medications VALUES(?,?,?)", mcs); 

AddMed.Parameters.Add("@Medication", SqlDbType.NVarChar).Value = MedName.Text.ToString(); 
AddMed.Parameters.Add("@Dose", SqlDbType.Int).Value = dose; 
AddMed.Parameters.Add("@manufacture", SqlDbType.NVarChar).Value = ManuDB.Text.ToString(); 
+1

SQL-Serverでは、パラメータには「@」が必要です。疑問符はmsアクセス用です。 –

+0

と各 "?"記号に値を割り当てる方法は? –

+1

ちょうど私の答えを編集しました、彼らは?を置き換えるパラメータを追加すると、最初のパラメータが最初の?など –

1

まず:あなたが接続を閉じるべきではありませんtryブロックではなく、finallyにあります。これにより、エラーが発生した場合でも接続が閉じられます。

第2:パラメータに誤りがある可能性があります。代わりにAddWithValueを使用して、そのタイプで遊んでみてください。 Medicationテーブルのプライマリキーにidentityのインクリメントがあるか、またはIDを手動で割り当てる必要がありますか?フィールドのデータ型を表示します。

:とにかく、あなたはエラーが発生しないほど奇妙です。 ExecuteNonQueryが返すもの(1になるはず)をデバッグしましたか? 「ばかげた」質問:正しいデータベースを使用していますか?おそらく、SQL-Server Expressはbin/debugフォルダにコピーを作成します。 MDFファイルをクリックしてプロパティを確認し、がDo Not Copyに設定されていることを確認します。

+0

MedIDは1ずつ増加するように設定されています。デフォルト設定では、try-catch-finallyを実行しても機能し、同じ「Medication Added」を表示しますが、テーブル自体には表示されません。 –

+0

私はこれを削除し、テーブル自体を再作成するのではなく、この時間とあなたの時間を無駄にしてくれると思います... idk、分かりにくいエラー? –

+0

@AmeerAdel:私の答えを編集しました。 –

関連する問題