需要帮助来使用MySqlTransaction(Need help in using MySqlTransaction)
IT问题网 2021-01-18 00:00:00
问 题
大家好我想在我的要求中使用mysqltransaction。实际上我对此有疑问,即根据我的要求,我将不得不从数据库中删除不同的值。
我正在做的过程如下。假设我有2个empid,其中此empid将包含可能为多个的不同值。我将使用dictionary存储该特定empid的相应值,然后我将它们保存到与empid相对应的列表中。
假设我有list元素as关注
对于empid 1,我将有1,2。我将检查此列表中数据库的最大值(如果存在)我想从数据库中删除此empid。
对于empid 2,我将有1, 2。但在我的数据库中,我将有3个最大值。所以这个失败了。我想回滚之前删除的项目。
是否可以处理交易,如果有的话可以帮助我解决这个问题
示例i代码
如果(findmax(lst,iempid)
{
obj.delete(" storeprocname"); // 当我的列表具有最大值时会发生这种情况
}
else
{
// 这里我想回滚我之前提到的类文件中的删除方法
}
public bool deletepayroll( string storeproc, bool 结果)
{
if (result == true )
{
m_bflag = false ;
this .m_oconn = utilities.getconnection();
m_ocmd = new mysqlcommand(storeproc,m_oconn);
m_ocmd.commandtype = commandtype.storedprocedure;
m_ocmd.parameters.addwithvalue(" _ empid",empid);
m_ocmd.parameters.addwithvalue(" _ fedtaxid",fedtaxid);
m_ocmd.parameters.addwithvalue(" _ payperiodnumber",payperiodnumber);
m_ocmd.parameters.addwithvalue(" _ payyear",payyear);
m_ocmd.parameters.addwithvalue(" _ paymentdate",paymentdate);
尝试
{
如果(m_oconn。 state!= connectionstate.open)
{
m_oconn.open();
}
if (m_ocmd.executenonquery()gt; 0 )
{
m_bflag = true ;
}
}
catch (mysqlexception osqlex)
{
m_sberrmsg.length = 0 跨度>;
m_sberrmsg = utilities.sqlerrormessage(osqlex);
// db写入错误日志
m_oerrlog.add(m_sberrmsg.tostring (),datetime.now);
}
catch (例外oex)
{
m_sberrmsg = utilities.errormessage(oex);
// db写入错误日志
m_oerrlog.add(m_sberrmsg.tostring (),datetime.now);
}
最后
{
m_oconn.close();
}
} 其他
{
// 这里我想回滚它是正确的过程
}
return m_bflag;
}
嗯,我认为没有人能清楚地理解我的问题,所以在简单的场景中我说的是
i我有一个表格,当我点击按钮时会有2个文本框和按钮我想将文本框中输入的文本作为单独的行插入数据库。
假设插入时我将有一个bool值,如果我为它插入的第一个项目给出了真值,我将对我要插入的第二个项目给出错误。由于我有假,我不想插入这个,所以我必须回滚前一个
a示例代码
按钮点击
{
string str = " dora";
string str1 = " babu"跨度>;
bool flag = true ;
i = 1 ,j = 1 ;
if (i == 1 amp;amp; flag == true )
inser str;
flag = false ;
如果(j == 1 amp;amp; flag == false )
rollback
}
解决方案
是 - 并且交易是正是你需要的。一旦启动事务,在提交事务之前,任何更改都不会是永久性的,这与正常操作不同,只要命令执行后它们就会不可逆转地发生。通过交易,您可以"改变主意"并回滚或取消您所采取的操作。
mysql中有交易指南: http://www.devshed.com/c/a/mysql/using- transactions-in-mysql-part-1 /[ ^ ]
正如originalgriff指出的那样,事务是执行此操作的正确方法。另请查看文档: mysqltransaction[ ^ ]。
另一件事,如果我理解你的情况正确,你是计算最大值,也许插入数据,以便你使用max + 1是类似的。如果您有这种结构,则不建议在数据库中维护此类订单号。每行应该有一个唯一的键,但是你不应该在程序中设置它。而是使用 auto_increment[ ^ ]
分享:
热门推荐