使用 Hashtable(哈希表)和 IEnumerator 接口 示例

来源:互联网 发布:js 注释 编辑:程序博客网 时间:2024/05/07 00:14

        今天在开发一个同步功能的时候,用到了Hashtable(哈希表)和 IEnumerator  接口,现在记录下来,以便以后学习!

 

  1. using System;
  2. using System.Collections;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Web;
  7. using System.Web.SessionState;
  8. using System.Web.UI;
  9. using System.Web.UI.WebControls;
  10. using System.Web.UI.HtmlControls;
  11. using System.Data.OracleClient;
  12. namespace Station.StationDataBase.StStation
  13. {
  14.     /// <summary>
  15.     /// SynchroStationData 的摘要说明。
  16.     /// </summary>
  17.     public class SynchroStationData : BaseSet.BasePape
  18.     {
  19.         protected System.Web.UI.WebControls.CheckBoxList chkStation;
  20.         protected System.Web.UI.WebControls.Label lblMessage;
  21.         protected System.Web.UI.WebControls.ImageButton btnSave;
  22.         
  23.         ArrayList arrList = new ArrayList();    // 记录已经同步过的数据
  24.     
  25.         private void Page_Load(object sender, System.EventArgs e)
  26.         {
  27.             // 在此处放置用户代码以初始化页面
  28.             if(!Page.IsPostBack)
  29.             {
  30.                 GetSynchroStationInfo();
  31.                 // 提示信息
  32.                 lblMessage.Text = "颜色说明:灰色-变电站已经同步完毕;黑色-变电站需要同步!";
  33.             }
  34.         }
  35.         #region Web 窗体设计器生成的代码
  36.         override protected void OnInit(EventArgs e)
  37.         {
  38.             //
  39.             // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
  40.             //
  41.             InitializeComponent();
  42.             base.OnInit(e);
  43.         }
  44.         
  45.         /// <summary>
  46.         /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  47.         /// 此方法的内容。
  48.         /// </summary>
  49.         private void InitializeComponent()
  50.         {    
  51.             this.btnSave.Click += new System.Web.UI.ImageClickEventHandler(this.btnSave_Click);
  52.             this.Load += new System.EventHandler(this.Page_Load);
  53.         }
  54.         #endregion
  55.         /// <summary>
  56.         /// 得到将要同步的变电站信息
  57.         /// </summary>
  58.         private void GetSynchroStationInfo()
  59.         {
  60.             BenzClass.Organ objOrgan = new BenzClass.Organ();
  61.             BaseSet.SessionValule objGetSession = new Station.BaseSet.SessionValule();
  62.             Components.StStation objGetStation = new Components.StStation();
  63.             DataSet dsBenz = new DataSet();
  64.             DataSet dsStation = new DataSet();
  65.             DataView dv;
  66.             ListItem objItem;
  67.             int intCompanyID;
  68.             string strStationID;
  69.             string strStationName;
  70.             try
  71.             {
  72.                 // 公司ID
  73.                 intCompanyID = objGetSession.GetCompanyIDBySession();
  74.                 // 得到Benz中数据
  75.                 objOrgan.ConnString = DBAccess.DBUtil.GetBasicConnectionString();
  76.                 dsBenz = objOrgan.OrganShowByOrganBureauID(intCompanyID);
  77.                 dv = dsBenz.Tables[0].DefaultView;
  78.                 dv.RowFilter = "f_OrganFlag in (16,64)"// 16,64表示变电站和其他分类
  79.                 // 得到变电站中数据
  80.                 dsStation = objGetStation.StationShow(intCompanyID);
  81.                 // 将Benz中数据放入哈希表中
  82.                 Hashtable myList = new Hashtable();
  83.                 for(int i = 0; i < dv.Count; i++)
  84.                 {
  85.                     myList.Add(dv[i]["f_OrganName"].ToString(),dv[i]["f_OrganID"].ToString());
  86.                 }
  87.                 // 将数据绑定到CheckBox上
  88.                 for(IDictionaryEnumerator ie = myList.GetEnumerator(); ie.MoveNext();)
  89.                 {
  90.                     objItem = new ListItem();
  91.                     objItem.Value = ie.Value.ToString();
  92.                     objItem.Text = ie.Key.ToString();
  93.                     for(int j = 0; j < dsStation.Tables[0].Rows.Count; j++)
  94.                     {
  95.                         strStationName = dsStation.Tables[0].Rows[j]["f_stationname"].ToString();
  96.                         strStationID = dsStation.Tables[0].Rows[j]["f_stationid"].ToString();
  97.                         
  98.                         if(strStationName.CompareTo(ie.Key.ToString()) == 0 
  99.                             && strStationID.CompareTo(ie.Value.ToString()) == 0)
  100.                         {
  101.                             objItem.Text = "<font color=/"gray/">" + ie.Key.ToString() + "</font>";
  102.                             // 记录已经同步过的数据
  103.                             arrList.Add(ie.Value.ToString());
  104.                         }
  105.                     }
  106.                     chkStation.Items.Add(objItem);
  107.                     objItem = null;
  108.                 }
  109.             }
  110.             catch(System.Exception err)
  111.             {
  112.                 string strError = err.Message.ToString().Trim();
  113.                 strError = PowerBase.GetOracleCustomErrorInfo(strError);
  114.                 PowerBase.ShowMessage(Response,strError);
  115.             }
  116.         }
  117.         /// <summary>
  118.         /// 变电站数据同步
  119.         /// </summary>
  120.         private void SynchroData()
  121.         {
  122.             BaseSet.SessionValule objGetSession = new BaseSet.SessionValule();
  123.             Components.StStation objStation = new Components.StStation();
  124.             int intCompanyID;
  125.             int intStationID;
  126.             string strStationName;
  127.             bool blnFlag = false;
  128.             OracleConnection oraConn = new OracleConnection();
  129.             OracleTransaction oraTran = null;
  130.             try
  131.             {
  132.                 oraConn.ConnectionString = DBAccess.DBUtil.GetConnectionString();
  133.                 oraConn.Open();
  134.             
  135.                 oraTran = oraConn.BeginTransaction(IsolationLevel.ReadCommitted);
  136.                 // 公司ID
  137.                 intCompanyID = objGetSession.GetCompanyIDBySession();
  138.                 for(int i = 0; i < chkStation.Items.Count; i++)
  139.                 {
  140.                     // 判断是否选中
  141.                     if(chkStation.Items[i].Selected)
  142.                     {
  143.                         intStationID = System.Convert.ToInt32(chkStation.Items[i].Value.ToString());
  144.                         strStationName = chkStation.Items[i].Text.ToString();
  145.                         // 判断是否数据已经同步过
  146.                         for(IEnumerator ie = arrList.GetEnumerator();ie.MoveNext();)
  147.                         {
  148.                             if(ie.Current.ToString().CompareTo(intStationID.ToString()) == 0)
  149.                             {
  150.                                 blnFlag = true;
  151.                                 break;
  152.                             }
  153.                         }
  154.                         // 数据同步
  155.                         if(!blnFlag)
  156.                         {
  157.                             objStation.CompanyID = intCompanyID;
  158.                             objStation.StationID = intStationID;
  159.                             objStation.StationName = strStationName;
  160.                             objStation.StationAdd(oraConn,oraTran);
  161.                         }
  162.                     }
  163.                 }
  164.                 //提交事务
  165.                 oraTran.Commit();
  166.                 PowerBase.ShowMessage(Response,"同步成功!");
  167.             }
  168.             catch(System.Exception err)
  169.             {
  170.                 if (oraTran != null)
  171.                 {
  172.                     oraTran.Rollback();
  173.                     oraTran = null;
  174.                 }
  175.                 string strError = err.Message.ToString().Trim();
  176.                 strError = PowerBase.GetOracleCustomErrorInfo(strError);
  177.                 PowerBase.ShowMessage(Response,strError);
  178.             }
  179.         }
  180.         /// <summary>
  181.         /// 保存事件
  182.         /// </summary>
  183.         /// <param name="sender"></param>
  184.         /// <param name="e"></param>
  185.         private void btnSave_Click(object sender, System.Web.UI.ImageClickEventArgs e)
  186.         {
  187.             // 同步数据
  188.             SynchroData();
  189.         }
  190.     }
  191. }
原创粉丝点击