首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:SqlTransaction已完成

错误:SqlTransaction已完成
EN

Stack Overflow用户
提问于 2014-05-29 14:40:33
回答 2查看 458关注 0票数 0

代码:

代码语言:javascript
复制
foreach (DataGridViewRow row1 in grdListKala.Rows)
            {

                if (grdListKala.Rows.Count == 0)
                {
                    MessageBox.Show("Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    try
                    {
                        objCon.Connecting();
                        objCon.con.Open();
                        transaction=objCon.con.BeginTransaction();
                        //******************************************
                        SqlCommand cmd1 = new SqlCommand();
                        cmd1.Connection = objCon.con;
                        cmd1.Transaction = transaction;
                        cmd1.ExecuteNonQuery();

                        //******************

                        foreach (DataGridViewRow row2 in grdListKala.Rows)
                        {
                            SqlCommand cmd2 = new SqlCommand();
                            cmd2.Connection = objCon.con;
                            cmd2.Transaction = transaction;
                            cmd2.ExecuteNonQuery();

                            SqlCommand cmd3 = new SqlCommand();
                            cmd3.Connection = objCon.con;
                            cmd3.Transaction = transaction;
                            cmd3.ExecuteNonQuery();

                        }
                        transaction.Commit();
                    }
                    catch (Exception exp)
                    {
                        if (transaction != null)
                            transaction.Rollback();
                    }
                    finally
                    {
                        objCon.con.Close();
                        transaction.Dispose();

                    }

错误:这个SqlTransaction已经完成;它不再可用了。我在transaction.commit之前尝试了cmd对象的关闭,因为已经打开了连接错误!如何在事务中使用这三个命令文本而没有错误!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-29 14:46:53

SQL事务对连接有效。一旦关闭连接,就会提交或回滚该事务。在事务的生命周期内保持连接打开。从本质上说,你需要这样做:

代码语言:javascript
复制
open connection
    start transaction
    command 1
    command 2
    ...
    command n
    commit transaction
close connection
票数 0
EN

Stack Overflow用户

发布于 2014-05-29 14:46:47

你打开和关闭连接的方式太频繁了:

代码语言:javascript
复制
objCon.con.Open();
...
cmd1.Connection = objCon.con;
cmd1.Connection.Open();

不需要第二个OpenExecuteNonQuery之后的Close也不需要。

基本上,您试图在执行每个命令之前重新打开连接,然后在执行之后再次关闭它。

您还将在catch子句中关闭一次连接,然后在finally子句中再次关闭连接。

只需除去除第一个之外的所有Open和除最后一个以外的所有Close

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23936040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档