我正在用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自動回滾的錯誤?我真的很想了解這裏發生了什麼。
感謝
爲什麼你不能把事務邏輯放在SQL語句中? –