我在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的服务器资源管理器进行了检查,并在删除之后(在我关闭之前)执行了“显示数据”并且没有删除。
但我现在完全无能为力。 : - (
答案 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好像它似乎工作,如果它后来崩溃,生病回到这个线程.. 但是删除+插入现在都很有效: - )
感谢所有试图提供帮助的人!