利用WebService进行数据更新[转]

*****************************************************  
  基本思路  
  *****************************************************  
  客户端为Access数据库,服务器端为Oracle。当客户端取出需要传输的数据集(DataSet)后,调用服务器端的WebService的InsertOracleOk方法,将数据集Insert到数据库中  
  ****************************************************  
  遇到的问题  
  ****************************************************  
  1、由于不知道客户端在运行时传输的是哪个表,因此如何根据数据集(DataSet)动态生成Insert语句?代码如何写?已知客户端与服务器端相同表的结构一致。  
  2、若Insert成功,在客户端上将数据集(DataSet)中的“操作标记”字段UpData并更新到本地数据库中可行吗?代码如何写?  
   
  *****************************************************  
  客户端  
  *****************************************************  
  获取待传输的DataSet  
  public   void   GetTransfersDataSet(string   LocalDatabasePath,string   LocalDatabaseName,string   LocalTableName)  
  {  
  OleDbConnection   AccseeConn   =   new   OleDbConnection();  
  AccseeConn.ConnectionString   =   @"Provider=Microsoft.Jet.OLEDB.4.0;Data   Source="+LocalDatabasePath+"\\"+LocalDatabaseName+";";  
  try  
  {  
  AccseeConn.Open();//打开数据集  
  string   strSelectCommand   ="select   *   FROM   "+LocalTableName+"   WHERE   bj<>'1'";//操作标记<>'1'  
  OleDbDataAdapter   da   =   new   OleDbDataAdapter(strSelectCommand,AccseeConn);  
   
  DataSet   ds   =   new   DataSet();  
  da.Fill(ds,LocalTableName);  
  //调用xml   web   service   引用  
  WebReferenceOracle.ServiceOracle   InsertOracle   =   new   WebReferenceOracle.ServiceOracle();  
  InsertOracle.InsertOracleOk(ds,LocalTableName);  
  boolGetTransfersDataSetOK   =   true;  
  ?????将数据集(DataSet)中的“操作标记”字段UpData并更新到本地数据库中  
  MessageBox.Show("成功");  
  }  
  catch   (Exception   ex)  
  {  
  //异常处理  
  MessageBox.Show("失败."+ex);  
  boolGetTransfersDataSetOK   =   false;  
  }  
  finally  
  {  
  AccseeConn.Close();  
  }  
  }  
  *************************************************************  
  服务器端WebService  
  *************************************************************  
  [WebMethod(Description   =   "插入数据")]  
  public   bool   InsertOracleOk(DataSet   DataSetInsert,string   strInsertTableName)  
  {  
  GetDatabaseConfig();//读取数据库连接参数  
  OracleConnection   thisOracleConnection   =   new   OracleConnection("data   source="+strOracleSID+";"+"user   id="+strOracleUpDateUser+";"+"password="+strOracleUpDatePassword+";");  
  try  
  {  
  thisOracleConnection.Open();  
  ???如何动态生成Insert语句。我想先应该将DataSet所有列的字段读出,赋值给一个数组。然后根据DataSet做一个循环,读出每一行的值,动态生成Insert语句。最后执行。(另可否调用存储过程来做呢?应该如何写?请详细说明。)  
   
  OracleCommand   cmd   =   new   OracleCommand();  
                                                                  //将DataSet所有列的字段读出,赋值给一个数组,请补充代码  
                                                                  a   =   new   string[???];  
                                                                   
  // cmd.CommandText   =   "INSERT   INTO   B   (字段1,字段2,字段3,字段4)   VALUES(?,?,?,?)";  
  //cmd.Parameters.Add()加参数,或调用存储过程  
  //DataSetInsert.Tables[0].  
  //foreach(DataRow   row   in   DataSetInsert.Table["TableName"].Row)  
  // foreach(DataRow   row   in   DataSetInsert.[0].Row)  
  // {    
  //              
  //              
  // cmd.Parameters["参数名"].Value   =   Convert.ToInt32(dr["字段名"]);  
  // //……  
  // cmd.Parameters["参数名"].Value   =   dr["字段名"].ToString();  
  // //执行cmd,将DataSet中的数据逐行插入数据库中  
  // cmd.ExecuteNonQuery();// }      
   
  return   true;  
  }  
  catch(OracleException)  
  {  
  return   false;  
  }  
  finally  
  {  
  thisOracleConnection.Close();  
  }  
  }  
   
  ******************************************************************

[原文:http://topic.csdn.net/t/20040213/18/2732557.html]

posted @ 2009-02-23 01:00  赖文华.NET  阅读(948)  评论(5编辑  收藏  举报