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 NeverCopy if Newer

在此页面上查看 MSDN 上的详细说明

连接字符串中的快捷方式|DataDirectory|(对于 winforms 项目)指向当前项目的 bin\debug 或 bin\release 相关子文件夹,您的程序所做的任何更改都适用于位于那里的数据库,但这些更改会在下一次被覆盖跑

于 2013-03-03T21:01:54.040 回答