2013-03-03 92 views
0

我在尝试删除行时遇到问题。如何从SQL Server数据库中删除表行?

所有行被选中并显示在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(); 
} 
+0

如何检查失败的删除? – Steve 2013-03-03 20:52:06

+0

@Steve 我打开数据库,没有被删除。 – user1814358 2013-03-03 20:54:11

+0

您是否在bin \ debug文件夹或主项目文件夹中的数据库中打开数据库? – Steve 2013-03-03 20:56:13

回答

0

当你在你的项目中的数据库文件,然后生成项目,数据库文件可以从根项目文件夹复制到输出(bin \ debug或bin \ release)文件夹。
此行为由数据库文件上的Copy To Output Directory属性控制。

如果您将此属性设置为始终复制,那么每次构建项目时,都会将数据库文件的新副本从根项目文件夹复制到输出目录,覆盖已经存在的目录并销毁您所做的更改在以前的调试会话中进行。

一个建议的解决方法是将此属性更改为Copy NeverCopy if Newer

查看MSDN at this page

在连接字符串指向快捷|DataDirectory|(对于WinForms项目)的详细解释到bin \调试或bin \ release当前项目的相对子文件夹中,程序所做的任何更改都适用于位于那里的数据库,但这些更改在下次运行时将被覆盖

+0

问题解决了,非常感谢你。 我被设置为解决方案资源管理器来显示所有,然后我绝对去bin和选择数据库,在哪里都是正常的。再次谢谢你,我会检查你的答案。 – user1814358 2013-03-03 21:59:51

相关问题