【问题标题】:C# Windows application with SQL Server database - dataloss while unexpected power off带有 SQL Server 数据库的 C# Windows 应用程序 - 意外断电时数据丢失
【发布时间】:2017-04-29 05:50:35
【问题描述】:

我有一个带有 SQL Server 2014 Express 数据库的 C# Windows 应用程序。在运行应用程序时,它使用 ADO.Net 插入/更新一些记录。当电脑因电源故障而意外关机时,数据库中所有保存/更新的记录都将丢失。

当我们关闭应用程序时,所有数据都会正确存储。

【问题讨论】:

  • 如果您在插入时发生断电,之前可以提交事务 - 那么在下次启动时,预期行为是非已提交的更改回滚 - 这是一件好事!只需重试这些插入。
  • 感谢詹姆斯的回复,现有应用程序我没有使用事务来提交数据库记录,如果我在插入或更新某些记录后正常关闭应用程序,那么它会正确保存。但是为什么在应用程序以断电情况结束时会丢失记录。我还添加了提交每条记录的事务,但在断电情况下事务不起作用。

标签: c# .net sql-server winforms


【解决方案1】:

ADO.NET 事务就是答案。你可以阅读更多here.

【讨论】:

  • 感谢 Farukh 的回复我已经检查了 sql 事务但没有工作。
【解决方案2】:

你可以试试下面的代码:

using System.Data.SqlClient;

var connection = new SqlConnection("Your connection");
{
    var command = connection.CreateCommand();
    SqlTransaction transaction = null;
    try
    {
        connection.Open();
        transaction = connection.BeginTransaction();
        command.Transaction = transaction;
        command.CommandText = "Your query";
        command.ExecuteNonQuery();
        transaction.Commit();
    }
    catch (Exception ex)
    {
        if (transaction != null) transaction.Rollback();
    }
    finally
    {
       connection.Close();
    }
}

【讨论】:

  • 你可能想在这里考虑一些usingstatements ;-)
  • 感谢 Leena 的回复...我已经编写了相同的代码,请了解我的场景细节我在 1 分钟内不断插入和更新表中的记录我插入 30 行更新 20 行,在此执行期间如果我直接关闭我的电脑,那么所有 30 条插入记录和 20 条更新记录都丢失了,我正在使用上面的代码。
猜你喜欢
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多