任何人都可以帮我解决这个错误的问题
已经有一个与此Connection关联的开放DataReader,必须先关闭它.
尝试读取此代码时错误失败.
transConn = mySqlConn.BeginTransaction(IsolationLevel.ReadCommitted)
Run Code Online (Sandbox Code Playgroud)
Datareader和初始化事务之间是否存在连接?
任何人都可以帮助我如何解决这个错误.
谢谢偷看!:)
我正在尝试将Microsoft SQL Server 2008 R2中的SNAPSHOT事务隔离级别与Entity Framework 4.0一起使用.然而,这似乎并不像我最初想的那么容易.
要使用SNAPSHOT隔离级别,必须在数据库中启用它.我做到了.我已经使用SQL Management Studio测试了SNAPSHOT隔离级别在我的数据库上按预期工作.我想使用这个隔离级别,因为我想要一致的读取而不锁定行或整个表.所以我的数据库已准备好让我使用SNAPSHOT隔离级别.到现在为止还挺好.
在我的repro应用程序,这是一个WPF应用程序,我有一个窗口,我从一个表中加载一些数据.每次单击按钮时,我一次加载5行.这是窗口的XAML:
<Window x:Class="EFSnapshotTransactionTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Name="UC" Closing="UC_Closing">
<DockPanel>
<Button Click="Button_Click" DockPanel.Dock="Top">Load next 5</Button>
<ScrollViewer>
<ListView ItemsSource="{Binding ElementName=UC, Path=ViewModel.Items}">
<ListView.View>
<GridView>
<GridViewColumn Header="Id" DisplayMemberBinding="{Binding Id}"/>
<GridViewColumn Header="Date" DisplayMemberBinding="{Binding Date}"/>
<GridViewColumn Header="DocumentNumber" DisplayMemberBinding="{Binding DocumentNumber}"/>
<GridViewColumn Header="Amount" DisplayMemberBinding="{Binding Amount}"/>
<GridViewColumn Header="Text" DisplayMemberBinding="{Binding Text}"/>
</GridView>
</ListView.View>
</ListView>
</ScrollViewer>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
这是窗口的代码隐藏:
public partial class MainWindow : Window
{
private ViewModel _vm;
public ViewModel ViewModel
{
get { return _vm; }
}
public …Run Code Online (Sandbox Code Playgroud) sql-server entity-framework transactions snapshot transaction-isolation
我刚开始休眠
在我的项目中,我需要处理交易.如何在两个类中处理声明式事务
例子:
//class 1
class A{
createA()
{
insert(A);
}
}
//class 2
class B
{
createB()
{
insert(B);
}
}
//class 3
@Transaction(Exception.class)
class C
{
test()
{
create(A);
create(B);
}
}
Run Code Online (Sandbox Code Playgroud)
根据上面的代码,有可能处理事务,这样如果classA中的insert成功并且classB中的insert失败,那么事务应该回滚并删除插入表A中对应于A类的记录
请使用声明式交易帮我解决这个问题....
在adavace中感谢....
在我的Django应用程序中,我具有从数据库中删除模型的单个实例的代码。两个并发请求都可能同时尝试删除同一模型。在这种情况下,我希望一个请求成功而另一个请求失败。我怎样才能做到这一点?
问题在于,当使用删除实例时delete(),Django不会返回有关命令是否成功的任何信息。此代码说明了问题:
b0 = Book.objects.get(id=1)
b1 = Book.objects.get(id=1)
b0.delete()
b1.delete()
Run Code Online (Sandbox Code Playgroud)
这两个delete()命令中只有一个实际上删除了该对象,但是我不知道哪个。不会引发任何异常,也不会返回任何指示命令成功的信息。在纯SQL中,该命令将返回删除的行数,如果该值为0,我知道删除失败。
我将PostgreSQL与默认的Read Commited隔离级别配合使用。我对此级别的理解是,每个命令(SELECT,DELETE等)都可以看到数据库的快照,但是下一个命令可以看到数据库的不同快照。我相信这意味着我不能做这样的事情:
# I believe this wont work
@commit_on_success
def view(request):
try:
book = Book.objects.get(id=1)
# Possibility that the instance is deleted by the other request
# before we get to the next delete()
book.delete()
except ObjectDoesntExist:
# Already been deleted
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在考虑使用NHibernate实现IRepository模式,我有一个问题,我无法回答搜索网络.
假设我有3个存储库,PersonRepository,PersonAddressRepository和PersonAccountRepository.现在假设业务逻辑指示存在调用PersonRepository.Deactivate(),PersonAddressRepository.Deactivate()和PersonAccountRepository.Deactivate()的"Deactivate Person"进程.
我希望能够按照......的方式做点什么.
using (ITransaction transaction = session.BeginTransaction()) {
session.Update(Person);
session.Update(PersonAddress);
session.Update(PersonAccount);
}
Run Code Online (Sandbox Code Playgroud)
因此,如果任何更新失败,整个过程将在数据库中回滚.现在我对NHibernate的理解是,你只能为每个对象创建一个Session,所以...
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly(typeof(Person).Assembly);
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
using (ISession session = sessionFactory.OpenSession()) {
using (ITransaction transaction = session.BeginTransaction()) {
session.Save(Person);
}
Run Code Online (Sandbox Code Playgroud)
这是对的还是我弄错了?有关NHibernate的多表更新和事务的事务的最佳实践是什么?
提前致谢.
应用程序基于Spring 2.5.5和hibernate 3.2.0 GA.
我的DAO中有以下方法,它将MessageEntities附加到指定的User:
public MessageEntity findByUserId(int userId) {
List<MessageEntity> result = (List<MessageEntity>) em.createNamedQuery(MessageEntity.Q_BY_USER_ID).setParameter("userId", userId).getResultList();
if (!result.isEmpty()) {
return result.get(0);
} else {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我需要从集成测试中调用此方法来检查系统的行为是否有效.只要这个方法不是事务性的,我得到的就是org.hibernate.SessionException:Session被关闭了!.避免这种情况的最简单方法是使用@Transactional(readOnly = true)标记findByUserId方法.但据我了解,事务管理应该是服务层的职责,以避免不必要的事务创建.所以,我的问题是:我怎样才能正确地摆脱SessionException?
我正在编写一个使用GWT,Hibernate和Google Guice(使用GIN)的相当简单的应用程序.我想要做的是使用外部管理器管理事务(比如 @Transactional在Spring中使用),而不是使用EntityManager#getTransaction.我试过用@Transactional,但它似乎对我不起作用.
我已经使用了EntityManager注入Providers,如下所示:
/* import stuff */
public class DbProvider implements Provider<EntityManager> {
public EntityManager get() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persdb");
return emf.createEntityManager();
}
}
Run Code Online (Sandbox Code Playgroud)
在手动管理事务时,它似乎正常工作.我希望自动管理事务,也可以使用DBUnit进行自动化测试.
有谁知道如何解决这个问题?
我正在使用Spring junit runner及其事务功能来在每次测试之前和之后启动和回滚事务.
但是我有一个测试类有一些繁重的数据库初始化,我希望每个测试(方法)在事务范围内运行,即在测试开始时启动一个事务,并在完成类中的所有测试后回滚它.
我需要帮助编写TSQL脚本来修改两列的数据类型.
我们正在更改两列:
我主要担心的是脚本的生产部署......
该表由一个公共网站主动使用,每小时可获得数千次点击.因此,我们需要脚本快速运行,而不会影响前端的服务.此外,如果发生错误,我们需要能够自动回滚事务.
幸运的是,该表只包含大约25行,所以我猜测更新会很快.
该数据库是SQL Server 2005.
(仅供参考 - 由于第三方工具与SQL Server的xml和uniqueidentifier类型不兼容,因此需要更改类型.我们已经测试了dev中的更改,并且更改没有任何功能问题.)
我使用生成的SQL脚本(sql 2k5)将列添加到表中.
我需要添加"检查是否存在",因为我的客户有时会运行脚本两次.(我无法控制这部分,这种情况一次又一次地发生)
我发现了一种加入sysobjects和syscolumns的方法,它可以工作.
我的问题是我必须在另一个表中添加一列,其中列不在表的末尾.
对于这个,SQL正在生成那么长的代码...用新列创建新的临时表,从旧表填充,删除旧表,最后重命名临时表.
这里的问题是这个脚本的脚本中有很多GO和事务...
我能做什么?
1.)删除所有GO - s?(不喜欢这个主意)
2.)在每个GO对之间添加我的IF?(不喜欢这个主意)
3.)是否有另一种有意义的方式,实施起来并不难
我无法想到任何事情,我可以检查发布版本,或者任何东西,而不仅仅是我的sysobjects和syscolumns join,但问题将是相同的.
因为GO-s,当它到达BEGIN的END时,我的If将被"遗忘"......
transactions ×10
hibernate ×3
java ×3
spring ×2
sql-server ×2
c# ×1
database ×1
datareader ×1
django ×1
guice ×1
if-statement ×1
irepository ×1
jpa ×1
junit ×1
nhibernate ×1
postgresql ×1
snapshot ×1
sql ×1
unit-testing ×1
vb.net ×1