问题描述
windFrom当点击添加学生信息时,是先将学生记录保存在一个列表(内存中),定义一个定时器,定期将列表中的学生记录(批量)写入数据库如何做?高手请进,谢谢。//学生信息实体.cspublicclassstuInfo{publicstringname;//学生性名publicstringsex;//学生性别publicstringinfo;//备注信息}//DAO操作.cspublicclassDAO_stuInfo{privateDataBasedb;publicDAO_stuInfo(){db=newDataBase();}//学生信息publicvoidaddCrossing_TF_Record(stuInfos){try{stringstrSQL;strSQL="INSERTINTOstuInfo(name,sex,info)values(";strSQL=strSQL+s.name.ToString()+",";strSQL=strSQL+s.sex.ToString();strSQL=strSQL+",'"+s.info.ToString()+"')";db.changeData(strSQL);}catch(Exceptionex){throw(ex);}}}//实行命令文本.cs///<summary>///Update,Delete,Insert操作///</summary>///<paramname="strSQL">命令文本</param>publicvoidchangeData(stringstrSQL){getConn();SqlCommandobjCommand=newSqlCommand();objCommand.Connection=mConn;objCommand.CommandText=strSQL;try{objCommand.ExecuteNonQuery();}catch(Exceptionex){throw(ex);}finally{closeConn();}}
解决方案
解决方案二:
使用MSMQ,将数据串行化后丢到消息队列中,然后再用一个Windows服务定时从消息队列中取出数据,插入数据库,保存在内存中毕竟不安全,如果程序挂了,没存的数据就丢了,而MSMQ就不会存在这些问题。
解决方案三:
做个例子看看,谢谢
解决方案四:
你就将数据存储在里面然后用个timer控件,设置定时将内存中列表的数据插入数据库插入成功后,将这条数据从内存列表充删除,避免重复定时执行就好了啊
解决方案五:
1、引用System.messagiong.dll2、usingSystem.messagiong命名空间3、创建/建立自己需要的队列(这里监测专有队列)stringqueuename=".\private$\testQueue";MessageQueueq;if(MessageQueue.Exists(queuename)){q=newSystem.Messaging.MessageQueue(queuename);}else{q=MessageQueue.Create(queuename);}这代代码执行后,会在消息队列中的专有队列看到名为testQueue的队列。具体为管理工具--〉计算机管理--〉服务和应用程序--〉消息队列--〉专用队列可以看到队列中存在的消息4、向队列发送消息两种发送消息的方式:简单消息,直接利用q.send("....");的方式发送,复杂消息(譬如一个特定对象,当然是可序列化的)采用Messagem=newMessage();m.Label="msg1";m.Body="testbody";q.Send(m);发送。消息会采用缺省的XML格式编码送到队列中5、消息接收主动方式,会同步阻塞当前线程Messagem=Receive();//接收同时,从队列中删除消息orMessagem=Peek();//不删除接收到的消息被动方式,异步调用方式,不会阻塞当前线程q.ReceiveCompleted+=newReceiveCompletedEventHandler(ReceivedEvt);//事件q.BeginReceive();其中ReceivedEvt要么为静态函数,要么必须是属于实例化的对象的可访问函数privatestaticvoidReceivedEvt(objectsource,ReceiveCompletedEventArgsasyncResult){try{MessageQueuemq=(MessageQueue)source;Messagem=mq.EndReceive(asyncResult.AsyncResult);//此事m为异步接收到的消息//在此插入处理消息的代码Console.WriteLine("接收到消息"+m.Label);mq.BeginReceive();//接收下一次事件}catch(MessageQueueException){}return;}大体上就这些,完整的应用你可以看一下PetShop的异步订单处理,另外,注意一点,消息队列是Windows的一一项服务,默认并没有安装,需要在“新增/删除程序项”里添加该服务。其实MSMQ是一项分布式处理技术,作为WinForm应用,你可以将所有客户端的学生记录全部发送到服务器的消息队列中,由服务器统一完成数据库的插入,当然,是否有必要这样做,你可以根据自己的情况取舍。
解决方案六:
引用4楼orain的回复:
1、引用System.messagiong.dll2、usingSystem.messagiong命名空间3、创建/建立自己需要的队列(这里监测专有队列)stringqueuename=".\private$\testQueue";MessageQueueq;if(MessageQueue.Exists(queuename)){q=newSystem.Messaging.MessageQueue(queuename);}else{q=MessageQueue.Create(queuename);}这代代码执行后,会在消息队列中的专有队列看到名为testQueue的队…
UP!