哎。网上也有一个SqlScope,但和我这个是两个东西。。

解决方案 »

  1.   

    我的ExecuteReader方法是通事件回调的,
    不知道这写法好不好?
    public delegate EventOnReader(object object ,SqlDataReader reader);
    public class DataAccess
    {
       public event EventOnReader OnReader;
       public void SqlReader(string strSql)
       {
          SqlConnection myConn = new SqlConnection(ConnString);
          SqlCommand comm = new SqlComamnd(strSql,myConn);
          SqlDataReader dr = comm.cmd.ExecuteReader()
          if(OnReader != null)
           {
              OnReader(this,dr)
            }
           dr.Close();
           myConn.Close();
       }
    }
      

  2.   

    我在下面的代码运用中,在最后一个for循环体内当循环执行2次以上就会
    发生事务回滚,请大家帮我看看怎么回事,不胜感激,回言请发到我邮箱([email protected])ISqlScope sqlscope=new SqlScopeImpl(ConnectString);
    using(sqlscope.BeginTransaction())
    {
       try
       {
    MaxProduceID=sqlscope.ExecuteString("Select number From T_LastNumber Where ID=@p0","001").Trim();
    DataRow r1=sqlscope.ExecuteDataRow("Select number,re From T_LastNumber Where ID=@p0","002");
    MaxGateID=r1[1].ToString().Trim() + r1[0].ToString().Trim();
    temp1=(int.Parse(MaxProduceID.Trim())+1).ToString().Trim();
    temp2=(int.Parse(r1[0].ToString().Trim())+1).ToString().Trim(); for(i=temp1.Length;i<MaxProduceID.Trim().Length;i++)
    {
    temp1="0"+temp1;
    } for(i=temp2.Length;i<r1[0].ToString().Trim().Length;i++)
    {
    temp2="0"+temp2;
    } sqlscope.ExecuteNonQuery("UPDATE T_LastNumber SET number=@p1 WHERE id=@p0","001",temp1);
    sqlscope.ExecuteNonQuery("UPDATE T_LastNumber SET number=@p1 WHERE id=@p0","002",temp2);

    lastid=sqlscope.ExecuteInt32(@"INSERT T_test(ClientID,GoodsID) VALUES (@p0,@p1) SELECT SCOPE_IDENTITY()",MaxProduceID,MaxGateID);

    Sql="insert T_test2(id,flag,number,Total) values(@p0,@p1,@p2,@p3)";

    for(i=0;i<4;i++)
    {
    if(tempstr1[i,0].Trim()!="")
    {
    sqlscope.ExecuteNonQuery(Sql,lastid,tempstr1[i,0],tempstr1[i,1],tempstr1[i,2]);
    }
    }
    sqlscope.Commit();
        }
        catch
    {
    sqlscope.Rollback();
    }
    }注:当sqlscope.ExecuteNonQuery(Sql,lastid,tempstr1[i,0],tempstr1[i,1],tempstr1[i,2]);
    执行2次以上(包括2次)时就会发生事务回滚,当它只执行一次时就不会.
    二维数组tempstr1[,]的每个元素都是不为null的值(最起码为""),
    表T_test2除了字段id,其它字段都为varchar型,且允许为空.
      

  3.   

    :)
    很高兴有人能使用我的东西。
    (网站之后放了个最新的代码。有9个例子)在你的代码中。
    你已经使用
    using(sqlscope.BeginTransaction())
    了,这样的话,除非你知道中途可能发生的错误,并且要进行处理,才使用try,catch不使用try,catch的写法最好是:using(sqlscope.BeginTransaction())
    {
        执行操作代码
        sqlscope.Commit();
    }这样的话,假如中途发生错误,那么将在“执行操作代码”里抛出异常。使用
    try
    {
    }
    catch
    {
    }
    把异常置之不管是不对的。这样外面的程序很难判断里面的操作是否顺利完成。------------你可以把代码中的trycatch去掉。然后发生错误时,你就可以知道错在哪里了。在你明确知道错误地方后,可以进一步优化代码。例如:using(sqlscope.BeginTransaction())
    {
    执行第一步操作。
    try
    {
    执行第二步操作,它很容易出错,而且错误需要处理
    }
    catch
    {
    如果错误范围不是预料中的,那么重新throw,或者return false,等通知调用者,这里失败了
    }
    //如果这一句最终没有执行,那么事务会回滚。
    ss.Commit();
    }
      

  4.   

    还有。
    打开SQL SERVER的事件探查器,可以跟踪到执行到那条SQL语句时停止了。