每个SqldataReader必须有一个自己的连接
所以SqldataReade不能共用transaction

解决方案 »

  1.   

    我很菜,请问SqldataReader怎么建立自己的连接呢?
      

  2.   

    我不明白“每个SqldataReader必须有一个自己的连接”这句话是什么意思啊~~~~我是菜鸟,请多关照!
      

  3.   

    除非这个SqlDataReader关闭后,才能继续使用Command利用这个连接来执行查询之类的。所以,必须等第一个SqlDataReader关闭后,才能执行第二个查询。你考虑用SqlDataAdapter和DataSet来实现吧
      

  4.   

    如果用SqlDataAdapter和DataSet来实现的话,是不是不用考虑Dataset关闭或清空等问题了啊?
      

  5.   

    Dim myTrans As SqlTransaction = robjSqlconnect.BeginTransaction()
    robjSqlcommand = robjSqlconnect.CreateCommand
    robjSqlcommand.Transaction = myTransrobjSqlcommand.CommandText = strSqlmoviesUpdate
    robjSqldataReader = robjSqlcommand.ExecuteReader  '用到了SqldataReader
    robjSqldataReader .Close();robjSqlcommand.CommandText = strSqlMovurlsUpdate
    robjSqldataReader = robjSqlcommand.ExecuteReader  '用到了SqldataReader
      

  6.   

    如果只是两个查询语句,用不着事务的;
    你用事务和不用事务都一样。
    对数据库表插入、删除、修改才用到数据库事务。
    你上面的代码该成
    try
    {
        // 进行多次查询
        ......
        return objRet; //objRet是要的结果集
    }
    catch
    {
        return null
    }
      

  7.   

    uffeng(阿呆) 大哥的方法我试过了,不行啊
      

  8.   

    每个SqldataReader必须有一个自己的连接
    然后一次提交整个事务
      

  9.   

    SqldataReader因为是与数据库保持连接的,所以一个SqldataReader就要占用一个数据库连接对象SqlConnection,而.NET里的事务是与sqlconnection对象来关联的。
    你可以用DataSet来处理,在DataSet里放进两张表就可以理解问题了。
      

  10.   

    vzxq(灵感人) 大哥您有其他办法吗?请多指教!~~~
      

  11.   

    try
    {
                    this.Cursor = Cursors.WaitCursor;
                    if(m_conn.State !=ConnectionState.Open)
    m_conn.Open();
    using(SqlTransaction trans = m_conn.BeginTransaction())
    {
    try
    {
    m_daBds.SelectCommand.Transaction = trans;
    m_cbBds.RefreshSchema(); DataSet dsChange = DsXsdy.GetChanges();
    if(dsChange ==null)
    {
    trans.Rollback();
    this.Cursor = Cursors.Default;
    return;
    }
    //执行数据库操作:insert or dle or update
    trans.Commit();
    this.Cursor = Cursors.Default;
    m_conn.Close();
    }
    catch (Exception ex)
    {
    trans.Rollback();
    throw ex;
    }
    }
    }
    catch (Exception ex)
    {
    this.Cursor = Cursors.Default;
    throw ex;
    }
      

  12.   

    SqlConnection myconn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnString"]);
    myconn.Open();
    SqlTransaction MyTran=myconn.BeginTransaction();
    SqlCommand mycommand;
    mycommand=myconn.CreateCommand();
    mycommand.Connection=myconn;
    mycommand.Transaction=MyTran;try
    {
    mycommand.CommandText="";
    robjSqldataReader = mycommand.ExecuteReader())  '用到了SqldataReader
    ...
    //close robjSqlDataReader
    robjSqlDataReadermycommand.CommandText="";
    robjSqldataReader = mycommand.ExecuteReader())  '用到了SqldataReader
    //close robjSqlDataReader
    robjSqlDataReader
    MyTran.Commit();//提交事务
    }
    Catch
    {
    MyTran.RollBack();
    }
    Finally
    {
    myconn.close();
    }