public bool RunProcTrans(string ParentSql, string ChildSql, DataTable dt, string ChildColumn, bool flag)
        {
            bool b = false;            SqlConnection Conn;            Conn = new SqlConnection(ConnStr);            Conn.Open();            SqlCommand cmd = CreateCmd(ParentSql, Conn);            SqlTransaction trans = Conn.BeginTransaction();  //开启事务            cmd.Transaction = trans;            try
            {
                SqlDataReader dr = cmd.ExecuteReader();                if (flag == true)
                {
                    if (dr.Read())
                    {
                        string str = dr[0].ToString();
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            dt.Rows[i][ChildColumn] = int.Parse(str);
                        }
                    }
                }                dr.Close();                dr.Dispose();                SqlDataAdapter Da;                Da = CreateDa(ChildSql);                SqlCommandBuilder scmd = new SqlCommandBuilder(Da);
                try
                {
                    lock (this)
                    {
                        Da.Update(dt);
                    }                    dt.AcceptChanges();                    trans.Commit();
                }
                catch (Exception Ex)
                {
                    trans.Rollback();
                }
            }
            catch
            {
                trans.Rollback();
            }
            finally
            {
                Dispose(Conn);
            }
            return b;
        }
以上的代码在以前执行时没有问题,自从数据库两表之间建了关系了就出现 
超时时间已到。在操作完成之前超时时间已过或服务器未响应。
这种错误,把关系去掉就又正常了,请各位帮我看看是不是代码出了问题

解决方案 »

  1.   

    sql语句是不是涉及这新建的关系,在查询分析器中执行看看。
      

  2.   

    lz  连接的sql服务器是本地的还是远程的呀?
      

  3.   

    把sql代码在查询分析器里执行下,如果执行不成功就是sql的问题,否则就是程序或连接的问题.
    看lz的代码应该没问题 , 你看下sql远程连接是否开启,防火墙是否关闭,还有windowns防火墙是否开着呢,
      

  4.   

    你怎么不把conn.open()放到try里边?你能保证你的连接一定能打开?
      

  5.   

    SQL涉及到这个关系的,是单据和单据明细的关系如果两表之间不建关系的话上面的代码操作起来没问题.但是一建关系就不行,不理解为什么
      

  6.   

    还有我的SQL服务器就是本机的
      

  7.   

    主表里是有OutstorebillId,outstorebill等字段
    次表里是有outstorebill_Detail,outstorebillId等字段插入时和更新时只要不更新outstorebillid这个字段就不会出错
      

  8.   

    是不是datatable更新数据库的问题
      

  9.   

    设置cmd.CommandTimeOut命令超时时间
      

  10.   


    你能说明下这怎么测吗,我测早就测过了,到了da.update(dt)那儿出的问题,这能看的出什么问题
      

  11.   


    估计是你的表有问题update我试过,只能操作一个表,并且必须是表才行,视图也不行。update包含了删除,增加,修改等功能,可以一起更新,但只能对一个基础表更新。你可以试试用触发器。update是更新不了两个表的。也更新不了视图的。最佳解决办法是更新一个表,然后在SQL里面加一个触发器,控制另一个表的更新。
      

  12.   

    你传递的参数DataTable dt是不是一个DataSet的子表,DataSet相当于是一个内存数据库,如果这个DataSet中对应的DataTable没有建立关系,而你想传递的参数建立的关系,可能会出错。
      

  13.   

    忘了说了,最好不要把删除和增加,更新等功能一起用update弄出来。为增加单独做一段程序,在源表中添加,然后用触发器在另一个表中增加
    删除同理update方法不是SQL里面的update方法,所以为添加,删除,更新单独做程序出来是应该的。