2017-01-06 2 views
2
using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    SqlCommand cmd = new SqlCommand("INSERT INTO Alarm (artistname, tijd) VALUES (@artistname, @tijd)", connection); 
    cmd.CommandType = CommandType.Text; 
    cmd.Connection = connection; 
    cmd.Parameters.AddWithValue("@artistname", alarm.ArtistName); 
    cmd.Parameters.AddWithValue("@tijd", alarm.Time); 
    connection.Open(); 
    int a = cmd.ExecuteNonQuery(); 
    System.Windows.Forms.MessageBox.Show(a.ToString()); 
    // returns 1 but database doesn't actually update.. 
} 

上記のコードは、データベースのアラームテーブルの更新に使用しているコードです。 int aは1を返しますが、データベースは実際には更新されません。私は間違って何をしていますか?ビジュアルスタジオはエラーメッセージも表示しません。SqlCommandは1を返しますが、データベースが更新されません。何が間違っていますか?

+3

を使用しています。 –

+0

sqlliteのようないくつかのデータベースは常にトランザクションを使用するので、トランザクションをデータベースに保存する(または接続を閉じる)ためにトランザクションをコミットする必要があります –

+1

データベースが更新されていないことをどのように知っていますか?あなたは照会していて何も挿入されていませんか? – NicoRiff

答えて

-2

ExecuteNonQueryは成功した1を返します。 UPDATEステートメントではなく、INSERTステートメントを実行しています。あなたは

INSERT INTO Alarm (artistname, tijd) VALUES (@artistname, @tijd); 
Select Scope_Idenitity();

を使用する追加された新しいレコードのIDにしたい場合は、あなたがあなたのトランザクションをコミットする必要があるかもしれません

int a = (int)cmd.ExecuteScalar();
+2

'ExecuteNonQuery'は、成功した場合、影響を受ける行の数を返します。私はOPが「何かが私のデータベースに入った」という意味で_updated_という用語を使用したと思う。 –

+0

はい、私はTimが「何かが私のデータベースに入った」という意味で「更新された」という用語を使用する。 (1は空) 私はlistview1からアーティストを選択し、 ''アラームを追加 ''を押して、 '私はこのアーチストを自分のテーブルに書いたがっています.ALALSとlistview2で見ることができます(これは私が別のアーティストのために設定したすべてのアラームを表示するものです)。 問題: Listview1はうまく動作します Listview2はalarms.tableを私のデータベース(テスト済み)で見ることができます しかし、私はフォームから項目を挿入できません。 –

関連する問題