<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      happyhippy

      這個世界的問題在于聰明人充滿疑惑,而傻子們堅信不疑。--羅素

              我看了一下dOOdad的源碼和生成的代碼,發現實體類中有提供ToXml和FromXml方法,實現了字符串到Datatable的轉換,于是決定試下用字符串來保存DataTable信息,然后再在網絡中傳輸字符串,這就是我的原始思想。

            在Web Service中使用dOOdad(上),將FromDataSet/ToDataSet改成FromXml/ToXml,返回值/參數改成string,即可實現以字符串作為返回值,下面以插入一條記錄為例:

      [WebMethod] 
      public bool Insert(string str) 

            
      bool wasSaved = false
            
      try 
            

               Employees emps 
      = new Employees(); 
               emps.FromXml(str); 
               emps.Save(); 
               wasSaved 
      = true
            }
       
            
      catch { } 
            
      return wasSaved; 
      }
       

              但這樣又引發了新的問題:ToXml后的字符串丟失了DataTable中的部分重要信息,如DataSet的Schema、DataRow的狀態(Added/Modified/Deleted)、沒有賦值的屬性等。所以在服務器端從字符串中取得數據Load進業務實體后,還得一些額外的操作,于是我嘗試了下面兩種方法,且都可以通過測試: 

       

      方法1 :new一個新業務實體,將數據拷貝到新實體中

      Web服務端代碼:

      [WebMethod]
      public bool Insert(string str)
      {
        Employee emps 
      = new Employee();
        emps.FromXml(str);
        Employee temp 
      = new Employee();
        temp.AddNew();
        temps.FirstName 
      = emps.FirstName;
        temps.LastName 
      = emps.LastName;
        ……   
      //其他字段的賦值
        temp.Save();
        
      int id = temp.ID;
      }

      調用WebService的客戶端代碼:

      Employee emps = new Employee();
      emps.FristName 
      = "Happy";
        temps.LastName 
      = "Hippy";
      …… 
      //其他字段的賦值
      Serivce1 webservice = new Service1();
      webservice.Insert(emps.Toxml());

             這種方法也不是很好,服務器端要從字符串中解析出數據并new一個新對象,再將數據拷貝到新對象中。麻煩,不爽。于是,我又嘗試了下面的方法。

       

      方法2 :為業務實體找回丟失的部分重要信息

                講解這種方法之前,先解釋一下emps.Save的原理,該Method內部,判斷DataRow的狀態(Added、Modified、Deleted)并根據狀態執行相應的插入/更新/刪除操作。
                事實上,執行emps.FromXml之后,DataRow的狀態為Added(可以用RowState()進行測試),所以理論上是可以執行Save()來直接進行插入操作,而不用new一個新對象;然而如方法1中所說,emps.ToXml獲得的字符串丟失了部分信息--emps對象的那些沒有賦值的屬性都丟失了,所以像ID這種在客戶端沒有賦值的屬性,在xml中也沒有它相應的標簽(<tag>).
                客戶端將業務實體Toxml轉換成string,傳給服務器端,服務器端的代碼:

      [WebMethod]
      public Insert(string str)
      {
        
      //客戶端沒有對ID進行賦值
        Employee emps = new Employee();
        emps.FromXml(str);
        
      //在這里訪問emps.ID會出錯:ID不是School中的列。
        emps.Save();//出錯(同上)。
      }

               出現上述注釋中的問題的原因是ID列的信息丟失了,這時我們可以手動添加ID列,示例代碼如下:

      [WebMethod]
      public Insert(string str)
      {
               Emplyee emps 
      = new Employee()
                emps.AddColumn(
      "ID",typeof(int));
                emps.AddColumn……
      //其他沒有賦值的屬性
                emps.Save(); //終于可以成功地寫入數據庫了^_^
      }

              客戶端代碼同法1中一樣,不再贅述。

              最后再補充一點:因為AddNew()方法是從數據庫中檢索架構的,而在調用WebService的客戶端,是不能通過這種方式來創建DataTable的,所以要在ConcreteClass中加一個方法來重寫AddNew()方法:

      public override void AddNew()
      {
            
      this.DataTable = new DataTable();
            
      this.AddColumn(Employee.ColumnNames.ID, typeof(int));
            
      this.AddColumn(Employee.ColumnName.FirstName,typeof(string));
            ………………
            
      base.AddNew();
      }


      posted on 2006-08-23 06:07  Silent Void  閱讀(595)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 国产乱码精品一区二三区| 97人妻蜜臀中文字幕| 熟女人妻视频| 国产丰满乱子伦午夜福利| 免费十八禁一区二区三区| 97精品尹人久久大香线蕉| 日韩精品亚洲精品第一页| 中文字幕一区有码视三区| 日韩中文免费一区二区| 肉大捧一进一出免费视频| 国产精品美女一区二区三| 中文字幕日韩有码一区| 精品国产污污免费网站| 不卡一区二区国产在线| 国产日韩入口一区二区| 成A人片亚洲日本久久| 国产成人高清精品免费软件| 日本激情久久精品人妻热| 国产成人免费| 亚洲国产精品综合久久2007| 亚洲精品中文字幕二区| 亚洲AV日韩AV永久无码电影| 雅安市| 日本不卡码一区二区三区| 亚洲一线二线三线品牌精华液久久久| 国产日韩综合av在线| 久久久精品2019中文字幕之3| 国内揄拍国内精品人妻久久| 又大又粗欧美成人网站| 国产精品视频亚洲二区| 日韩人妻少妇一区二区三区| free性开放小少妇| 内射视频福利在线观看| 精品人妻二区中文字幕| 欧美成a人片在线观看久| 麻豆蜜桃伦理一区二区三区| 日韩V欧美V中文在线| 大庆市| 在线观看潮喷失禁大喷水无码| 体验区试看120秒啪啪免费| 国产首页一区二区不卡|