利用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();
}
}
******************************************************************