如何一次性向SC提交多条数据?
(创建时间:2010年05月27日 18:35:00)
Jangogo : 
我们编程的时候经常会碰到需要 提交 多条数据到SC,并且由SC的函数把这些数据存入数据库。
例如,进销存的销售单据:
该单据有两部分信息:
1.主表的信息(一行),包括:单号、时间、制单人、客户代码等
2.从表的信息(多行),包括:货品代码、数量、 单价 等

如果是非WEB的程序我们一般的做法就是先提交主表信息到服务器,保存主表信息,返回一个键值,再循环多次提交从表信息,一行行保存从表信息。
这样有以下弊端:
1. 频繁和服务器交互,性能低
2.如果某一次提交失败(如提交到一半,网络中断),就会引起服务端的数据不完整 (这是最严重的问题)
3.和2类似,当某一次提交的数据保存到数据库失败(例如数据类型验证失败或者是关联键值验证失败),则要rollback的时候会变得非常困难。

有鉴于此,我们推荐的做法都是 把要提交的所有数据 串成一个 固定自定义格式的字符串,然后 一次性的提交给SC(服务器)!
这样可以很好的避免上述问题。
SC只需要一个 Save(data) 的函数,当一次提交所有数据后,我们可以把数据按自己定义的格式进行拆分,在Save函数体内就可以完成所有的保存工作,而且保存是否成功,数据验证是否有问题等等
都可以通过RESET机制给客户端一个返回信息。

一次性提交数据的自定义格式的格式定义技巧:
一般我们会把数据组合成字符串,把字段的值用TAB字符( javascript为 "\t"  ,SC为 VBTAB  )分隔,行与行之间用竖制表符号( javascript为 "\x0B"  ,SC为 chr(11)  )进行分隔。
提交前我们先对数据用javascript进行一次验证。验证没有问题就join为一个字符串,然后提交到SC。

特别注意:
1. 提交到SC前,应该保证每一个字段的值都不要包含 TAB字符、竖制表符、回车符(SC语句不能分行)、换行符(SC语句不能分行)、双引号(双引号要替换为两个双引号,因为VBS的用法中双引号是这样转义的)
2.自定义的格式的每个字段对应的信息自己应该彻底清楚,并且留有文档说明数组的元素序号和字段的对应关系。
3.当提交的数据和字段对应关系是不确定的,或者数组元素个数不确定,我们建议在提交数据的时候把主表字段名称列表作为首行、然后是主表数据,然后是从表的字段名称列表,然后是从表数据。这样你只要分析
数组的第一行和第三行就可以了
文档中心