C# SQL Server数据库不支持';不要删除记录

C# SQL Server数据库不支持';不要删除记录,c#,sql-server,sql-delete,C#,Sql Server,Sql Delete,我在一个C#项目中有一个SQL Server数据库 我使用连接字符串连接到它。。我可以使用方法ExecuteNonQuery插入数据,没有问题 但是当我删除时,它只是暂时删除它,只要我重新启动应用程序,它就会回滚删除。。有什么想法吗 PS:我在一个直接查询中测试了这个字符串,它在那里工作得很好 public void executeNonQuery(string input) { db.Open(); SqlCommand cmd = new SqlCommand(input,

我在一个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");}
    }
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);
 }

专用数据库()
{
string connStr=ConfigurationManager.ConnectionStrings[“EndProject.Properties.Settings.DBtestConnectionString”]。ConnectionString;
db=新的SqlConnection(connStr);
}
然后我打开和关闭它,所以连接不是每次都打开

老实说:

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

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

类型:Microsoft SQL Server

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

此外,我刚刚检查了VS2010的服务器资源管理器,并在删除(在关闭它之前)后执行了“显示数据”操作,但它没有被删除

但我现在完全不知所措了-(

许多应用程序用于管理数据库连接。默认情况下,SQL Server不会这样做,但应用程序中的其他因素可能会这样做

另外,如果您真的在这样做,并且您的输入来自用户界面,我迫不及待地向您介绍许多用于管理数据库连接的应用程序。SQL Server默认情况下不会这样做,但应用程序中的其他因素可能会这样做


此外,如果您真的这样做了,并且您的输入来自用户界面,我迫不及待地向您介绍您描述的行为听起来像是自动提交已关闭。请尝试以下操作,并查看记录是否保持删除状态:

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();
        }
}

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

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();
        }
}

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


这是最简单的解决方案。

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


这是最简单的解决方案。

好的,显然是我在插入零件时弄错了。。。 有人建议我是因为每次应用程序运行时都会创建VisualStudio数据库。 所以我安装了MS SQL 2008 R2。创建了一个具有相同布局的新数据库。 更改了连接字符串 wuupti-woo,它似乎起作用了,如果稍后出现故障,我会回到这个线程。。 但是现在删除+插入两个都非常有效:-)


感谢所有试图帮忙的人

好的,显然是我在插入部分出错了。。。 有人建议我是因为每次应用程序运行时都会创建VisualStudio数据库。 所以我安装了MS SQL 2008 R2。创建了具有相同布局的新数据库。 更改了连接字符串 wuupti-woo,它似乎起作用了,如果稍后出现故障,我会回到这个线程。。 但是现在删除+插入两个都非常有效:-)


感谢所有试图帮忙的人

请提供用于删除表或数据库的代码好吗?您是否正在使用Visual Studio并监督是否已将“复制到输出目录”设置为“始终复制”或“如果更新,请复制”?(尽管这与您关于插入没有问题的陈述相矛盾,但还是要检查一下)。我想看看1)您在何处创建和处理连接(我希望您没有缓存它或使它在多个命令中保持活动状态)2)您使用的SQL到底是什么3)是什么让您认为行被“立即删除”4)是什么让您认为行被“回滚”可以向我们显示您正在使用的连接字符串??我怀疑您可能正在使用“用户实例”类型的数据库-这些数据库在应用程序运行的目录中创建,并在应用程序完成时被“处理”…marc_s>我一直在使用连接字符串,我使用它插入和选择,没有任何问题。它会一直留在那里。Andrew Barber>>我会在一秒钟内用这些信息更新主线程:-)Olaf>在哪里可以看到这些?:-)请提供用于删除表或数据库的代码好吗?您是否正在使用Visual Studio并监督是否已将“复制到输出目录”设置为“始终复制”或“如果更新,请复制”?(尽管这与您关于插入没有问题的陈述相矛盾,但还是要检查一下)。我想看看1)您在何处创建和处理连接(我希望您没有缓存它或使它在多个命令中保持活动状态)2)您使用的SQL到底是什么3)是什么让您认为行被“立即删除”4)是什么让您认为行被“回滚”可以向我们显示您正在使用的连接字符串??我怀疑您可能正在使用“用户实例”类型的数据库-这些数据库在应用程序运行的目录中创建,并在应用程序完成时被“处理”…marc_s>我一直在使用连接字符串,我使用它插入和选择,没有任何问题。它会一直留在那里。Andrew Barber>>我会在一秒钟内用这些信息更新主线程:-)Olaf>在哪里可以看到这些?:-)呵呵,这在某种程度上可能是个问题,谢谢你注意到了。。正在进行更多验证;-)你能告诉我在我的应用程序中还有哪些因素可以做到这一点。。。如果是事务插入,插入是否也会回滚,因为我使用的是相同的方法?如果您在中添加我请求的信息,我们可能会告诉您