Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OLEDB传输中的错误_C#_Transactions_Oledb_Executenonquery - Fatal编程技术网

C# OLEDB传输中的错误

C# OLEDB传输中的错误,c#,transactions,oledb,executenonquery,C#,Transactions,Oledb,Executenonquery,我在和OleDb做交易。我没有说明如何计算变量,如finalQuantity和finalMoneyBuyer,因为这并不重要。我的代码是: using(OleDbConnection con = DAL.GetConnection()) { OleDbTransaction transaction = null; try { con.Open(); transaction = con.

我在和OleDb做交易。我没有说明如何计算变量,如
finalQuantity
finalMoneyBuyer
,因为这并不重要。我的代码是:

    using(OleDbConnection con = DAL.GetConnection())
    {
        OleDbTransaction transaction = null;
        try
        {
            con.Open();
            transaction = con.BeginTransaction();

            if (realQuantity == quantity)
            {
                sql = "DELETE FROM item WHERE (id =" + id + ")";
            }
            else if (realQuantity > quantity)
            {
                sql = "UPDATE item SET quantity = " + finalQuantity + " WHERE (id = "+id+")";
            }
            OleDbCommand cmd = DAL.GetCommand(con, sql);
            cmd.Transaction = transaction;

            string sql2 = "UPDATE lol SET money = " + finalMoneyBuyer + " WHERE (UserName = '" + Session["username"] + "')";
            OleDbCommand cmd2 = DAL.GetCommand(con, sql2);
            cmd2.Transaction = transaction;

            string sql3 = "UPDATE lol SET money = " + finalMoneySeller + " WHERE (UserName = '" + seller + "')";
            OleDbCommand cmd3 = DAL.GetCommand(con, sql3);
            cmd3.Transaction = transaction;

            int num1 = cmd.ExecuteNonQuery();
            int num2 = cmd2.ExecuteNonQuery();
            int num3 = cmd3.ExecuteNonQuery();

            if(num1 == 0 || num2 == 0 || num3 == 0)
            {
                //No esperamos a que sea 0, asi que vamos a echar para atras todo lo que hicimos
                transaction.Rollback();
                //mandar error
                Response.Redirect("home.aspx?err=Error1");
            }
            else
            {
                transaction.Commit();
                Response.Redirect("home.aspx?err=Purchase was successful!");
            }
        }
        catch(OleDbException ex)
        {
            try
            {
                //algo malo paso, vamos a echar para atras todo lo que hicimos.
                transaction.Rollback();
                Response.Redirect("home.aspx?err=Error2");
            }
            catch{}
        }
    }
运行代码后。。。我得到这个错误:


希望您能提供帮助,谢谢。

您必须为命令对象设置事务:

cmd.Transaction = transaction;

等等。

我是交易新手,我从以下答案中获取信息:等等。。。具体在哪里?对不起,我对这个有点陌生。在OleDbCommand cmd=DAL.GetCommand(con,sql)之后和ExecuteNonQuery()之前谢谢。现在它通过了。但是,交易没有成功的原因是什么?它转到这一行
Response.Redirect(“home.aspx?err=Error2”)这就像你的屏幕截图中的例外sais:当你在连接上打开事务时,你必须告诉每个命令,哪个在这个连接上运行,它属于哪个事务。是的,我现在这样做了。我将代码更改为告诉
cmd.Transaction=Transaction
。问题是,现在它进入了捕获,而不执行事务。我想纠正这一点。