两地局域网,这边输入的工作单另一边能看到,可批量更新,
初步打算用webserveice,先查询到要更新的数据,下载到客户端,
再一条条插入,做过的兄弟帮给点意见,谢谢~~~

解决方案 »

  1.   

    用web services比较好实现,
    我刚做过一个项目就有这部分要求.
    和老兄的方法一样.先在本地查到要更新的数据.
    再调用远程的Web Service操作远程的数据库
      

  2.   


    帖点代码or(int table = 0;table < syncArray.Count;table++)
    {
    operate = (Operation)syncArray[table];
    string[] servers = GetServer(operate.Server);
    int server = 0;
    switch(operate.OP)
    {
    case "Add":
    sqlComm.CommandText="select * from "+operate.TableName.ToString()+" where UID='"+operate.UID.ToString()+"'";
    drTable=sqlComm.ExecuteReader(); fieldCount = drTable.FieldCount;
    fieldName = new string[fieldCount];
    fieldType = new string[fieldCount];
    fieldObj = new object[fieldCount];

    while(drTable.Read())
    {
    lstSync.Items.Add("获取添加到"+operate.TableName.ToString()+"的记录操作————开始");
    //service.WriteToTable(); try
    {
    for(int i = 0; i < drTable.FieldCount;i++)
    {
    fieldName[i] = drTable.GetName(i);
    fieldType[i] = drTable.GetFieldType(i).ToString();
    fieldObj[i] = drTable[i];
    }
    string rs="";
    for(server = 0;server < servers.Length;server++)
    {
    service.Url = hash[servers[server]].ToString();
    rs = service.WriteToTable(operate.TableName.ToString(),operate.UID,fieldName,fieldType,fieldObj);//
    }
    if(rs == "true")
    {
    UpdateRecord(operate.TableName,operate.UID);
    }
    lstSync.Items.Add("获取添加到"+operate.TableName.ToString()+"的记录操作————完成");
    }
    catch
    {
    lstSync.Items.Add("获取添加到"+operate.TableName.ToString()+"的记录操作————未能完成");
    }
    }
    drTable.Close();
    break;
    case "Del":
    lstSync.Items.Add("获取删除"+operate.TableName.ToString()+"的记录操作————开始");
    try
    {
    for(server = 0;server < servers.Length;server++)
    {
    service.Url = hash[servers[server]].ToString();
    result = service.DelFromTable(operate.TableName.ToString(),operate.UID);//
    }
    }
    catch
    {
    }
    lstSync.Items.Add("获取删除"+operate.TableName.ToString()+"的记录操作————完成");
    break;
    case "Modify":
    sqlComm.CommandText="select * from "+operate.TableName.ToString()+" where UID='"+operate.UID.ToString()+"'";
    drTable=sqlComm.ExecuteReader(); fieldCount = drTable.FieldCount;
    fieldName = new string[fieldCount];
    fieldType = new string[fieldCount];
    fieldObj = new object[fieldCount];

    while(drTable.Read())
    {
    lstSync.Items.Add("获取修改"+operate.TableName.ToString()+"的记录操作————开始");
    //service.WriteToTable();
    try
    {
    for(int i = 0; i < drTable.FieldCount;i++)
    {
    fieldName[i] = drTable.GetName(i);
    fieldType[i] = drTable.GetFieldType(i).ToString();
    fieldObj[i] = drTable[i];
    } for(server = 0;server < servers.Length;server++)
    {
    service.Url = hash[servers[server]].ToString();
    result = service.UpdateTable(operate.TableName.ToString(),operate.UID,fieldName,fieldType,fieldObj);//
    //MessageBox.Show(result1);
    lstSync.Items.Add("获取更新"+operate.TableName.ToString()+"的记录操作————完成");
    }
    }
    catch(Exception ex)
    {
    //MessageBox.Show(ex.Message);
    lstSync.Items.Add("获取修改"+operate.TableName.ToString()+"的记录操作————未能完成");
    }
    }
    drTable.Close();
    break;
    }
    }
    sqlComm.CommandText="delete from Operation";
    try
    {
    sqlComm.ExecuteNonQuery();
    }
    catch
    { }
    sqlConn.Close();
    lstSync.Items.Add("数据异步更新————完成"); }
      

  3.   

    忘了说,不用webForm,用winForm,公司内部知道就行。
    相对来说,这个应该简单一些。另外一定要保证安全,事关生产,
    至少要保证数据库服务器的安全。
      

  4.   

    你的系统客户端交互式设计是什么机制?数据刷新的性能要求如何?
    =====================================
    winForm服务端是否一直在线?
    =====================================
    如果安全的话,可以一直在线你是否详细研究过两边数据库都有哪些冲突的可能性?
    =====================================
    数据库结构一样,不能有重复记录,这个简单,
    另个要同步的不是整个数据库,而是4、5个表。我是这样想的,A端要更新时,发出请求,也就是调用B端的webService,
    返回要更新的数据,然后逐条插入到A那边的数据库中。上面有的兄弟可能想得太复杂了。
      

  5.   

    lovvver(www.notsoft.cn) 兄还是没弄明白我的问题。为什么不弄一台数据库服务器,放在公网上共用呢?
    ================================================
    不是做网站,是公司内部用的,本来要用光纤,
    但考虑到成本,就用adsl包月要实际一些用前台程序来同步两地的数据库,这是非常不明智的做法。
    ================================================
    先查询,查询到的无误再更新,再强调一下,是winForm。