SQL Server数据库不会删除记录

时间:2010-12-16 21:06:29

标签: c# sql-server sql-delete

我在C#项目中有一个SQL Server数据库。

我使用连接字符串连接到它..我可以使用方法ExecuteNonQuery来插入数据,没问题。

但是当我删除时,它只是暂时删除它,一旦我重新启动应用程序它就会回滚删除..有什么想法吗?

PS:我在直接查询中测试了字符串,并且在那里工作正常。

public void executeNonQuery(string input)
{
    db.Open();
    SqlCommand cmd = new SqlCommand(input, db);
    cmd.ExecuteNonQuery();
    db.Close();
}

编辑:删除代码:

private void buttonSletPost_Click(object sender, EventArgs e)
    {
        if(dataGridView1.GetCellCount(DataGridViewElementStates.Selected)>0){
            for (int i = 0;i < dataGridView1.GetCellCount(DataGridViewElementStates.Selected); i++)
            {
                String str1 = String.Format("WARNING about to DELETE:\n {0} \n BE CAREFULL NO TURNING BACK NOW!", Regnskab.getInstance().dbSelectPostID(dataGridView1.SelectedCells[i].Value.ToString())[0].ToString());
                if (MessageBox.Show(str1, "Confirm Deletion", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {

                    string str = String.Format("DELETE FROM PostTable WHERE PostID={0}", dataGridView1.SelectedCells[i].Value.ToString());
                    Database.getInstance().executeNonQuery(str);
                    Console.WriteLine(str);
                }
            }
        }else {MessageBox.Show("No cells selected");}
    }

将提供以下输出:

DELETE FROM PostTable WHERE PostID=7

app.config中的连接字符串:

<connectionStrings>
    <add name="EndProject.Properties.Settings.DBtestConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DBtest.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" providerName="System.Data.SqlClient" />


 private Database() 
 {
        string connStr = ConfigurationManager.ConnectionStrings["EndProject.Properties.Settings.DBtestConnectionString"].ConnectionString;
        db = new SqlConnection(connStr);
 }

然后我打开并关闭它,所以每次连接都没有打开。

说实话:

我不知道在哪里可以看到我的数据库信息,这里是VS2010中属性的一些信息。

提供程序:SQL Server的.NET Framework数据提供程序

键入:Microsoft SQL Server

Andrew's 3rd:我认为它们会被暂时删除,因为我在datagridview中重新加载了信息,然后它就消失了。但是当我关闭应用程序并再次启动时,它又回来了......

此外,我刚刚使用VS2010的服务器资源管理器进行了检查,并在删除之后(在我关闭之前)执行了“显示数据”并且没有删除。

但我现在完全无能为力。 : - (

4 个答案:

答案 0 :(得分:3)

许多应用程序使用Transactions来管理数据库连接。默认情况下,SQL Server不会这样做,但应用程序中的其他因素可能正在执行此操作。

此外,如果您真的这样做,并且您的输入来自用户界面,我迫不及待地向您介绍Little Bobby Tables

答案 1 :(得分:0)

您所描述的行为听起来像是自动提交。请尝试以下操作,查看记录是否保持删除状态:

public void executeNonQuery(string input)
{
         db.Open();
         using (var txn = db.BeginTransaction())
         {
             SqlCommand cmd = new SqlCommand(input, db);
             cmd.Transaction = txn;
             cmd.ExecuteNonQuery();
             db.Close();
             txn.Commit();
        }
}

答案 2 :(得分:0)

使用SQL Server Profiler运行跟踪并捕获正在数据库上执行的实际T-SQL语句。

这是最简单的解决方案。

答案 3 :(得分:0)

好吧,显然是我错误的插入部分...... 有人建议我是因为每次applikation运行时都会创建Visual Studio数据库。 所以我安装了MS SQL 2008 R2。创建了具有相同布局的新DB。 更改了连接字符串 并且wuupti好像它似乎工作,如果它后来崩溃,生病回到这个线程.. 但是删除+插入现在都很有效: - )

感谢所有试图提供帮助的人!