我有一個存盤程序如下所示,已創建
DROP PROCEDURE IF EXISTS insertIOVandPosData;
delimiter //
CREATE procedure insertIOVandPosData(
IN INtest_ID int,
IN INvelocity float,
IN INposition float)
begin
insert into iovandpos (test_ID,velocity,position) values (INtest_ID,INvelocity,INposition);
end
//
delimiter ;
然后在mfc里面呼叫他并插入大量資料,于是我就用了事務處理,代碼如下
IOVandPos data;
data.test_ID = 1;
data.position = 1;
data.velocity = 1;
char buf[200];
sprintf_s(buf, "CALL insertIOVandPosData(%d,%f,%f)", data.test_ID, data.position, data.velocity);
mysql_query(&mysql, "START TRANSACTION"); // 開啟事務, 如果沒有開啟事務,那么效率會變得非常低下!
for (int i = 0; i < 1000; i++)
{
if (mysql_query(&mysql, buf)) //執行SQL陳述句
{
::MessageBox(NULL, _T("操作失敗"), _T("提示"), NULL);
return 0;
}
}
mysql_query(&mysql, "COMMIT"); // 提交事務
這樣操作是不會報錯的,但是正常不應該是存入資料庫1000條資料嗎,可結果是資料庫中只有一條而且最后那條資料(里面有個自動遞增的主鍵能看出來,唯一的一條資料的主鍵值為1000),這就非常的讓人難受了。。。有大佬解答下嗎?
uj5u.com熱心網友回復:
執行一次,mysql_query(&mysql, buf)回傳什么,執行一次就return 0了uj5u.com熱心網友回復:
你這種呼叫方法不行,因為存盤程序執行完,已經commit了
你外層的事務不起作用啊
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/14989.html
標籤:MySQL
