C# Sql连接隔离级别保留

C# Sql连接隔离级别保留,c#,sql-server,isolation-level,transaction-isolation,C#,Sql Server,Isolation Level,Transaction Isolation,我有一个包含两部分的小应用程序: 与数据库联系以检索配置数据的配置部件 数据导入器部件,使用配置将数据导入数据库 数据导入器正在多个线程中运行,使用的是IsolationLevel.Snapshot上的事务 配置sql命令不使用任何事务 “配置”窗口打开时,数据导入器无法同时运行 我的问题如下: 1.打开应用程序并检查配置。(进入配置窗口以抽查所有内容)。 2.运行数据导入。 3.重新打开配置窗口 在导入后重新打开配置窗口时,我将收到一个DataReader的错误,它说快照隔离事务访问数据库失败

我有一个包含两部分的小应用程序:

  • 与数据库联系以检索配置数据的配置部件
  • 数据导入器部件,使用配置将数据导入数据库
  • 数据导入器正在多个线程中运行,使用的是
    IsolationLevel.Snapshot上的事务


    配置sql命令不使用任何事务

    “配置”窗口打开时,数据导入器无法同时运行

    我的问题如下:

    1.打开应用程序并检查配置。(进入配置窗口以抽查所有内容)。 2.运行数据导入。 3.重新打开配置窗口

    在导入后重新打开配置窗口时,我将收到一个DataReader的错误,它说
    快照隔离事务访问数据库失败…
    ,但是此DataReader是从一个根本没有设置任何事务或隔离级别的SqlConnection创建的

    如果我重新启动应用程序,我可以重新打开配置窗口而不会出错

    Net或SQLServer是否处于隔离级别


    有没有一种方法可以在设置隔离级别后更改它,而不为所有事务创建新的事务?

    我认为隔离级别是通过连接池进行的

    正如本文所述,这是出于设计

    有一些方法可以解决这个问题,比如显式指定事务隔离级别


    您可能需要签出。

    我认为隔离级别是通过连接池进行的

    正如本文所述,这是出于设计

    有一些方法可以解决这个问题,比如显式指定事务隔离级别


    您可能需要签出。

    “配置sql命令不使用任何事务。”-这是不正确的。每个DML语句都在一个事务中运行,无论您是否打开一个事务。如果在运行语句时没有打开一个,SQL Server将打开一个。语句完成后它对该事务的处理取决于连接所处的模式-自动提交或隐式事务模式。我现在明白了这一点,最初我只是使用Visual Studio的调试监视,手动查看所有“事务”属性,发现它们都为空,这让我得出了这样的结论:“配置sql命令不使用任何事务。”-这是不正确的。每个DML语句都在一个事务中运行,无论您是否打开一个事务。如果在运行语句时没有打开一个,SQL Server将打开一个。语句完成后它对该事务的处理取决于连接所处的模式-自动提交或隐式事务模式。我现在明白了这一点,最初我只是使用Visual Studio的调试监视,手动查看所有“事务”属性,发现它们都为空,这让我得出了这样的结论。