积极答复者
请教一个程序设计的思路问题!

问题
-
现在本地有一个假设的表(table):
id,user,sex,date,ip,zhuangt......
0,123,男,2012-06-07,127.0.0.1,未提交.......
1,333,女,2012-06-07,127.0.0.1,未提交.......
2,222,男,2012-06-07,127.0.0.1,未提交.......
...................
这个表每天可能有上万、上十万行新数据产生,通过本地的windows服务每10秒读取一次数据库把这些数据上传到服务器端(服务器端没有开放1433,只提交了webservice来接收这些数据,webservice每次只允许请求1000行数据)
部分代码:
string conn = "数据库连接"; string sql = "select top 5000 * from table where zhuangt='未提交'"; SqlConnection cn = new SqlConnection(conn); cn.Open(); SqlDataAdapter adapt = new SqlDataAdapter(sql, cn); DataSet ds = new DataSet(); adapt.Fill(ds, "sms_sendlog"); if (ds.Tables[0].Rows.Count != 0) { string s = "0"; string sqlid = "Update table set zhuangt='已提交' where"; string id = ""; for (int i = 1; i <= ds.Tables[0].Rows.Count; i++) { id += " id=" + ds.Tables[0].Rows[i - 1][0].ToString() + " or"; if (i % 1000 == 0) { try { if (s = "0") { s = "调用webservice的返回值"; if (s = "0") { sqlid += id.Substring(0, id.Length - 3); SqlCommand com = new SqlCommand(sqlid, cn); com.ExecuteNonQuery(); } } sqlid = "Update table set zhuangt='已提交' where"; id = ""; } catch (Exception ex) { } } } if (id != "") { try { if (s = "0") { s = "调用webservice的返回值"; if (s = "0") { sqlid += id.Substring(0, id.Length - 3); SqlCommand com = new SqlCommand(sqlid, cn); com.ExecuteNonQuery(); } } sqlid = "Update table set zhuangt='已提交' where"; id = ""; } catch (Exception ex) { } } cn.Close(); }
以上是部分代码,写的windows服务是每10秒读取一次数据库的数据,当webservice返回值慢的时候本地的服务就会出现并发的情况(可能有朋友会说把读取的时间修改长一点),出现重复提交数据,请教下有什么方法能避免这样的并发出现同时提交数据的效率也会比较高。
答案
-
不是修改读取出来的数据的标记,
这个标记是用了标记这个服务的的。和你要操作的数据没有关系。
如果这个标记为0,表示上一轮操作数据完成。
如果这个标记为1,表示上一轮数据还没有操作完成,就不要进行下一轮操作了
http://blog.csdn.net/zx13525079024
- 已标记为答案 Bob ShenModerator 2012年6月18日 8:56
-
- 已标记为答案 Bob ShenModerator 2012年6月18日 8:56
全部回复
-
不是修改读取出来的数据的标记,
这个标记是用了标记这个服务的的。和你要操作的数据没有关系。
如果这个标记为0,表示上一轮操作数据完成。
如果这个标记为1,表示上一轮数据还没有操作完成,就不要进行下一轮操作了
http://blog.csdn.net/zx13525079024
- 已标记为答案 Bob ShenModerator 2012年6月18日 8:56
-
- 已标记为答案 Bob ShenModerator 2012年6月18日 8:56