S
sjg23690428
Unregistered / Unconfirmed
GUEST, unregistred user!
要求:socket客户端向socket服务端发送一条SQL语句,并通过服务端程序向数据库中执行。
我本人提出解决方案,共大家探讨。
1.客户端向服务端发送自定义格式字符串,例如 00300005update aaa set bbb='c'
0030 发送字符总长度,0005 执行SQL语句最长时间, update aaa set bbb='c' 为实际要执行的SQL语句。
2.客户端等待服务端执行结果,等待最长时间为0005+2, 服务端接收到信息后,解析出要执行SQL语句最长时间“0005”与SQL语句“update aaa set bbb='c'”,数据库中已经写好了执行SQL语句的存储过程,存储过程有三个参数,分别为(执行最长时间、SQL语句、执行状态)。存储过程主要功能为,执行客户端传来的SQL语句。
3.如执行SQL语句错误则通过“执行状态”变量返出“执行错误”信息,并发送到客户端。 客户端根据此返回信息做出相应处理,
4.如SQL语句执行的时间大于0005秒,则存储过程回滚刚执行的SQL语句。并不向客户端发送认何信息。这时客户端,等待返回信息的时间必定会到0005+2秒,客户端就认为传送数据超时。 这样主要是为解决SQL语句执行时间大于了客户端的等待时间。
5.如SQL语句执行正确并在设定时间内执行完成,则向客户端返回执行成功信息。
6.当客户端收到“执行成功”信息后,则客户端删除已发送的信息。
7.客户端如收到,“执行错误”,则会发送下一条SQL语句,而错误SQL语句则等待人工处理。
8.客户端发送数据超时,则会重新发送此条SQL语句。
以上是我现在所用的socket传送机制,不知道我说的大家能否看明白。以上处理机制有几个问题,但我还不知道怎么解决。但出错的几率不高。
第1问题,如SQL语句在设定时间内正确执行。并在返回客户端“成功执行”信息时,出现网络问题,此时客户端就无法收到“成功执行”信息,就会认为发送超时,但此时服务端其实已经成功执行了SQL语,当网络正常后,客户端会重新发送此SQL语句。
如果发送的SQL语句是"insert"插入语句,此时就会出现,发送数据重复的现象。
哈哈.....各位高人,看看谁有高招[][][][][8D][8D][8D]
我本人提出解决方案,共大家探讨。
1.客户端向服务端发送自定义格式字符串,例如 00300005update aaa set bbb='c'
0030 发送字符总长度,0005 执行SQL语句最长时间, update aaa set bbb='c' 为实际要执行的SQL语句。
2.客户端等待服务端执行结果,等待最长时间为0005+2, 服务端接收到信息后,解析出要执行SQL语句最长时间“0005”与SQL语句“update aaa set bbb='c'”,数据库中已经写好了执行SQL语句的存储过程,存储过程有三个参数,分别为(执行最长时间、SQL语句、执行状态)。存储过程主要功能为,执行客户端传来的SQL语句。
3.如执行SQL语句错误则通过“执行状态”变量返出“执行错误”信息,并发送到客户端。 客户端根据此返回信息做出相应处理,
4.如SQL语句执行的时间大于0005秒,则存储过程回滚刚执行的SQL语句。并不向客户端发送认何信息。这时客户端,等待返回信息的时间必定会到0005+2秒,客户端就认为传送数据超时。 这样主要是为解决SQL语句执行时间大于了客户端的等待时间。
5.如SQL语句执行正确并在设定时间内执行完成,则向客户端返回执行成功信息。
6.当客户端收到“执行成功”信息后,则客户端删除已发送的信息。
7.客户端如收到,“执行错误”,则会发送下一条SQL语句,而错误SQL语句则等待人工处理。
8.客户端发送数据超时,则会重新发送此条SQL语句。
以上是我现在所用的socket传送机制,不知道我说的大家能否看明白。以上处理机制有几个问题,但我还不知道怎么解决。但出错的几率不高。
第1问题,如SQL语句在设定时间内正确执行。并在返回客户端“成功执行”信息时,出现网络问题,此时客户端就无法收到“成功执行”信息,就会认为发送超时,但此时服务端其实已经成功执行了SQL语,当网络正常后,客户端会重新发送此SQL语句。
如果发送的SQL语句是"insert"插入语句,此时就会出现,发送数据重复的现象。
哈哈.....各位高人,看看谁有高招[][][][][8D][8D][8D]