用SQL的事务,或者ADO.NET的事务都可以.

解决方案 »

  1.   

    public int Update_ImportData(string sTableName,DataSet DS,ref string sRsMsg)
    {
    // string abc ="111";
    // string bbb = "222";
    // string ccc = "";
    // ccc = string.Format("{0}+{1}",abc,bbb);
    // sRsMsg = abc+bbb;
    if(sTableName.Length == 0 || DS.Tables["import_data"] == null)
    {
    log.WriteLog(1,fac.sRtnMsg,"报表补录数据更新时参数传递错误",sf.GetFileName(),sf.GetFileLineNumber());
    return -1;
    } int iResult = 0;
    int iTempRs = 0;
    string sID = "";
    string sFlagId  ="";
    string sSql = "";
    string sTemp = "";
    string sFieldName  = "";
    string sFieldValue = ""; //fac.OpenConnection(ref Conn,sConn); //取得表的ID字段名
                sFlagId=sTableName+"_id";
    if( fac.BeginTransaction(Conn,ref Trans) < 0)
    {
    log.WriteLog(1,fac.sRtnMsg,"报表补录数据更新事务开始失败",sf.GetFileName(),sf.GetFileLineNumber());
    sRsMsg = "报表补录数据更新事务开始失败!" + fac.sRtnMsg;
    iTempRs= -2;
    }
    else
    {
    for (int j=0;j<DS.Tables["import_data"].Rows.Count;j++ )
    {
    sTemp = ""; sSql = "";
    sSql = string.Format("update {0} set ",sTableName); for( int i=0;i<DS.Tables["import_field_cfg"].Rows.Count;i++ )
    {
    sFieldName = DS.Tables["import_field_cfg"].Rows[i]["field_name"].ToString();
    sFieldValue = DS.Tables["import_data"].Rows[j][sFieldName].ToString(); if( i < DS.Tables["import_field_cfg"].Rows.Count - 1  )
    {
    sTemp = sTemp + string.Format("{0}={1},",sFieldName,sFieldValue);
    }
    else
    { sTemp = sTemp + string.Format("{0}={1}",sFieldName,sFieldValue);
    if (sFlagId.IndexOf("bl")!=-1)
    {
    sID = DS.Tables["import_data"].Rows[j]["id"].ToString();
    sSql = sSql + sTemp + " where id=" + sID;
    }
    else
    {
    sID = DS.Tables["import_data"].Rows[j][sFlagId].ToString();
    sSql =string.Format("{0}{1} where {2}={3}",sSql,sTemp,sFlagId,sID);
    }

    }
    }
    iResult = fac.CmdExeNoQuery(Trans,sSql); if ( iResult< 0 )
    {
    //??是否需要将未完成更新的数据保存,而不再进行重新提交
    //??若不需要重新提交,则保存未完成的更新数据,继续当前更新操作 sRsMsg = "更新报表补录数据失败!" + fac.sRtnMsg; log.WriteLog(1,sRsMsg,"更新报表补录数据失败",sf.GetFileName(),sf.GetFileLineNumber());
    iTempRs = -3;

    //??若需要重新提交,则中止当前更新操作,重新提交
    //break;
    }
    } iResult = fac.Commit(Trans); if ( iResult < 0 )
    {
    fac.Rollback(Trans); sRsMsg = "更新报表补录数据失败!" + fac.sRtnMsg;
    log.WriteLog(1,sRsMsg,"更新报表补录数据失败",sf.GetFileName(),sf.GetFileLineNumber()); iTempRs = -4;
    }
    else
    {
    sRsMsg = "数据更新操作完成!";
    }
    }     fac.CloseConnection(Conn);
    return iTempRs;

    }

    }