【问题标题】:How to run non-persistent queries in Visual Studio如何在 Visual Studio 中运行非持久查询
【发布时间】:2015-07-14 06:23:40
【问题描述】:

在 Visual Studio 中使用查询设计功能时,我在测试时在 SQL 数据库或 Microsoft Access 数据库上运行的任何查询都是持久的。这意味着他们实际上更改了表中的数据。有没有办法在程序运行之前测试它们时使查询不持久?使用 C# 作为编程语言,如果需要,使用 .NET 作为框架。还需要了解使用 MS Access 或 SQL 数据库执行此操作的过程。

【问题讨论】:

  • 你在说什么样的查询? SELECT statmeent 肯定不会,当然INSERTUPDATE 会改变您的数据。听起来您需要一个单独的测试数据库。
  • 对不起,我以为这是暗示的。是的,像插入和更新这样的查询类型会改变数据。我只是想看看结果集在设计视图中的样子,而无需实际更改数据。

标签: c# sql .net ms-access query-designer


【解决方案1】:

您可以在 C# 中执行事务,类似于在 SQL 中使用它们的方式。这是一个例子:

connection.Open();

SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;

// Start a local transaction.
transaction = connection.BeginTransaction("SampleTransaction");

//Execute query here
Query details

//check if test environment
bool testEnvironment = SomeConfigFile.property("testEnvironment");
if (!testEnvironment) {
   transaction.Commit();
} else {
   transaction.Rollback();
}

这里是关于 C# 事务的文档:https://msdn.microsoft.com/en-us/library/86773566%28v=vs.110%29.aspx

【讨论】:

    【解决方案2】:

    VS 应该可以在您测试时创建您正在处理的 SQL 数据的本地副本。它保存在 bin 文件夹中。看看这个:

    https://msdn.microsoft.com/en-us/library/ms246989.aspx

    完成测试后,您可以简单地将其更改为指向您希望通过应用程序更改的数据库。

    【讨论】:

      【解决方案3】:

      我不知道有一种方法可以准确地得到你想要的东西,但我认为有一种方法可以接近你想要的行为:

      使用 Microsoft SQL Server 时,创建名称中带有前导哈希 (#tableName) 的表将导致该表在会话结束时被释放。

      您可以利用这一点来获得所需行为的一种方法是将工作表复制到临时表中,并在临时表而不是活动表上工作。

      为此,请使用以下内容:

      SELECT * INTO #tempTable FROM liveTable
      

      这将创建一个完整的 liveTable 副本,其中包含所有相同的列和行。完成后,表格将自动删除,不会进行任何永久性更改。

      这对于您在大型数据集的同一子集上执行的一系列查询也很有用。将数据子集选择到较小的临时表中可以使后续查询比必须从完整数据集中重复选择要快得多。

      请记住,一旦您的连接关闭,所有数据都会随之而来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-15
        • 2011-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-17
        相关资源
        最近更新 更多