奇怪的ExecSQL
最近为了响应潮流就将原先软件的BDE用DBExpress替换了,结果发现了不少问题。以下是其中一个比较怪异的问题:
从代码中明显可以看出插入操作一定失败,因为‘1:2’转化为int类型时出错了。比较奇怪的是try中的代码竟然没有抛出任何异常???
没办法,我又试了下将‘1:2’放到第一个插入语句中,这回正常抛异常了;
但是为什么第一个插入正常,第二个插入失败就不抛出异常了呢?
我用这段代码又试了下ADO,结果是一样的。
我又再试了下BDE,BDE的结果是:只要一个有错就抛出异常;结果在catch(EDBEngineError &e)中捕获到异常后,调用Rollback上出了异常,说是“Rollback 没有对应的Begin Transaction”
怎么会有这么多问题,是不是用法不对啊,哪位知道?请告诉下,先谢谢了!!
TSQLConnection * pDatabase = NULL;
pDatabase = SQLConnection1;
TTransactionDesc TransDesc;
TransDesc.TransactionID = 1;
TransDesc.IsolationLevel = Sqlexpr::xilREADCOMMITTED;
pDatabase->StartTransaction(TransDesc);
/*table1(c1 varchar(50),c2 int)*/
AnsiString ansiSQL = "insert into table1(c1,c2) values('v1','1');";
ansiSQL += "insert into table1(c1,c2) values('v2','1:2');";
SQLQuery3->CommandText = ansiSQL;
try
{
SQLQuery3->ExecSQL();
pDatabase->Commit(TransDesc);
}
catch(TDBXError &e)
{
AnsiString ansiErrorMsg = e.Message;
pDatabase->Rollback(TransDesc);
}
TSQLConnection * pDatabase = NULL; pDatabase = SQLConnection1; TTransactionDesc TransDesc; TransDesc.TransactionID = 1; TransDesc.IsolationLevel = Sqlexpr::xilREADCOMMITTED; pDatabase->StartTransaction(TransDesc); /*table1(c1 varchar(50),c2 int)*/ try { SQLQuery3->SQL->Clear(); SQLQuery3->SQL->Add("insert into table1(c1,c2) values('v1','1')"); SQLQuery3->ExecSQL(); SQLQuery3->SQL->Clear(); SQLQuery3->SQL->Add("insert into table1(c1,c2) values('v2','1:2')"); SQLQuery3->ExecSQL(); pDatabase->Commit(TransDesc); } catch(TDBXError &e) { AnsiString ansiErrorMsg = e.Message; pDatabase->Rollback(TransDesc); }