2010-12-16 64 views
0

我有一个C#项目中的SQL Server数据库。SQL Server数据库不会删除记录

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

但是,当我删除,它只是暂时删除它,只要我重新启动应用程序它回滚删除..任何想法?

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

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

编辑:缺失CODE:

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中

DELETE FROM PostTable WHERE PostID=7 

连接字符串:

<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性质一些信息。

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

类型:Microsoft SQL Server的

安德鲁的第三:我想是因为我在我的DataGridView重新加载信息,他们被暂时删除,并从那里走了。但后来当我关闭应用程序,并重新启动它,它回来了...

另外我刚刚与VS2010的服务器浏览器进行了检查,做了一个“显示数据”后删除(之前关闭),它wasn不会删除。

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

+1

您能否提供您用于删除表格或数据库的代码? – 2010-12-16 21:10:29

+1

您是否正在使用Visual Studio,并且正在监督您已将“复制到输出目录”设置为“始终复制”或“如果新的复制”? (虽然这与你的陈述相矛盾,即插入没有问题 - 但无论如何都要检查)。 – Olaf 2010-12-16 21:11:34

+2

我希望看到1)你在创建和处理连接的位置(我希望你没有缓存它或者为多个命令保留它)2)确切地说你正在使用什么SQL 3)是什么让你认为行是'暂时被删除'4)是什么让你认为他们'回滚' – 2010-12-16 21:12:43

回答

0

好吧,它明显是我误解插入部分... 有人建议,我是因为每次运行应用程序时创建的Visual Studio数据库。 所以我安装了MS SQL 2008 R2。创建一个具有相同布局的新数据库。 改变了连接字符串 而wuupti佑似乎工作,生病回来这个线程,如果它以后坏了.. 但删除+插入两个工作大大现在:-)

感谢所有谁试图帮助!

3

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

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

+0

嘿嘿,这可能是一个问题,因为注意到我.. 更多验证的方式;-) 你能告诉我什么其他因素在我的应用程序可以做到这一点... 而不会插入也回滚,如果它是交易,因为我使用相同的方法来做到这一点? – 2010-12-16 21:40:16

+0

如果您在我的评论中添加了我请求的信息,我们可能会告诉您。这实际上并不足以防止大部分猜测。需要更多的输入... – 2010-12-16 21:48:40

+0

它现在在那里 而它的非交易,我已经通过尝试这样做了下面的检查。如果是的话,它也应该回滚我的插入。 – 2010-12-16 22:25:47

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

附加信息:当分配给该命令的连接处于未决的本地事务中时,ExecuteNonQuery需要该命令进行事务。该命令的Transaction属性尚未初始化。 ------------------------------------------------- ------------------- 似乎没有交易 – 2010-12-16 21:46:22

+0

cmd.Transaction = txn; – 2010-12-17 00:51:18

0

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

这是最简单的解决方案。