0

行を削除しようとして問題が発生しました。

すべての行が選択され、ListBoxコントロールに表示されます。
次に、btnObrisi_Clickイベント(Obrisi = delete)を呼び出すと、から選択したアイテムListBoxが削除されます。

アイテムは実際にはコントロールから削除されますが、値はデータベースから削除されません。

これは私が使用しているコードです:

private string conString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";
private SqlConnection con;
private SqlCommand com;
private DataTable dt;
private SqlDataAdapter da;

private DataTable SelectAll()
{
    con = new SqlConnection(conString);
    com = new SqlCommand();
    dt = new DataTable();
    da = new SqlDataAdapter();

    com.Connection = con;
    com.CommandType = CommandType.Text;
    com.CommandText = "SELECT * FROM predmeti";
    da.SelectCommand = com;
    da.Fill(dt);

    return dt;
}

private void Obrisi(int id)
{
    con = new SqlConnection(conString);
    com = new SqlCommand();
    com.Connection = con;
    com.CommandType = CommandType.Text;
    com.CommandText = "DELETE FROM predmeti WHERE predmetID = @predmetID";
    com.Parameters.AddWithValue("@predmetID", id);

    try
    {
        con.Open();
        com.ExecuteNonQuery();
         MessageBox.Show("Obrisano");
    }
    catch(Exception ex)
    {
         MessageBox.Show(ex.Message);
    }
    finally
    {
         con.Close();
    }
}

private void Citaj()
{
    listBox1.ValueMember = "predmetID";
    listBox1.DisplayMember = "ime_predmeta";
    listBox1.DataSource = SelectAll();
}

private void btnOsvezi_Click(object sender, EventArgs e)
{
    Citaj();
}

private void Form1_Load(object sender, EventArgs e)
{
    Citaj();
}

private void btnObrisi_Click(object sender, EventArgs e)
{
    int id = Convert.ToInt32(listBox1.SelectedValue);
    Obrisi(id);
    Citaj();
}
4

1 に答える 1

0

プロジェクトにデータベースファイルがあり、プロジェクトをビルドする場合、データベースファイルをルートプロジェクトフォルダーから出力(bin\debugまたはbin\release)フォルダーにコピーできます。
この動作はCopy To Output Directory、データベースファイルのプロパティによって制御されます。

このプロパティを[常にコピー]に設定している場合、プロジェクトをビルドするたびに、データベースファイルの新しいコピーがルートプロジェクトフォルダーから出力ディレクトリにコピーされ、既存のディレクトリが上書きされ、前に行った変更が破棄されます。デバッグセッション。

推奨される修正は、このプロパティをCopy Neverまたはに変更することです。Copy if Newer

このページでMSDNの詳細な説明を参照してください

接続文字列のショートカット|DataDirectory|は、(winformsプロジェクトの場合)現在のプロジェクトのbin\debugまたはbin\release相対サブフォルダーを指します。プログラムによって行われた変更は、そこにあるデータベースで機能しますが、これらの変更は次の時点で上書きされます。走る

于 2013-03-03T21:01:54.040 に答える