我正在用C++写入SQL Server数据库。我有一个叫做SQLTransaction的对象,它在代码块的开头创建时,向SQL Server发送'begin transaction'。ROLLBACK TRANSACTION请求在SQL Server之后没有对应的BEGIN TRANSACTION错误8114
然后我发送一个或多个SQL语句到服务器。如果一切顺利,我在SQLTransaction对象中设置一个标志,让它知道这组命令进行得很顺利。当SQLTransaction对象超出范围时,它会根据标志的状态向服务器发送“提交事务”或“回滚事务”。
它看起来是这样的:
{
TSQLTransaction SQLTran();
try
{
Send(SomeSQLCommand);
}
catch(EMSError &e)
{
InformOperator();
return;
}
SQLTran.commit();
}
我发送一个指挥不力,这些方框的一个有一个SQL语句和命令扔了SQL错误8114
错误转换数据类型varchar数字
我已经修复了这个问题。我不明白的事实是,我还收到第二个SQL错误消息
ROLLBACK TRANSACTION请求没有对应的BEGIN TRANSACTION。
我找不到任何告诉我这个事务可以或不应该在故障后回滚的东西。
这个完全相同的SQLTransaction对象在我的应用程序的许多地方使用,似乎总是工作正常,直到现在。出于某种原因,这个SQL错误似乎被区别对待。是否有一些SQL Server自动回滚的错误?我真的很想了解这里发生了什么。
感谢
2017-02-11
Kevin
+0
为什么你不能把事务逻辑放在SQL语句中? –