我有一个settingsForm,在这种形式下,用户将更改不同的值,添加/删除数据库中的内容,我需要在使用点击取消按钮时,他所做的所有更改都将被取消并返回上次保存的状态,这是怎么回事有效吗?
答案 0 :(得分:6)
最简单的方法是在用户点击OK之前不要进行的更改。列出所有必须完成的更改,并在OK上执行该列表。只需关闭取消表单即可。
答案 1 :(得分:0)
您可以使用BeginTransaction
然后对数据库执行查询。
private static SqlTransaction transaction;
private static SqlConnection conn;
public static void BeginTransaction()
{
try
{
transaction = conn.BeginTransaction();
}
catch (SqlException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
}
如果用户单击“确定”,则执行CommitTransaction
:
public static void CommitTransaction()
{
try
{
transaction.Commit();
}
catch (SqlException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
}
如果用户点击取消,则执行RollbackTransaction
:
public static void RollbackTransaction()
{
try
{
transaction.Rollback();
}
catch (SqlException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
}
您可以在表单加载事件上使用BeginTransaction
,例如:
private void Form1_Load(object sender, EventArgs e)
{
conn.Open();
ClassName.BeginTransaction();
}
然后根据点击事件关闭连接。使用取消按钮,他所做的所有更改都将被取消并返回上次保存状态。如果单击“确定”按钮,则所有更改都将提交到数据库。
private void cancel_Click(object sender, EventArgs e)
{
ClassName.RollbackTransaction();
conn.Close();
}
private void ok_Click(object sender, EventArgs e)
{
ClassName.CommitTransaction();
conn.Close();
}
ClassName是定义连接的类。现在,您可以根据Form_Load
处打开的连接执行查询。直到用户按下确定或取消按钮。例如,您可以从表按钮单击执行delete all。
private void deleteAll_Click(object sender, EventArgs e)
{
SqlCommand cmnd = CreateCommand("TRUNCATE TABLE TABLE_1", CommandType.Text);
cmd.ExecuteNonQuery();
}
将对数据库进行更改(全部删除),具体取决于用户点击cancel
或ok
。