问题描述
需要做个在服务器上一直操作数据库的程序代码如下:System.Threading.TimerPreTimer;voidpreTimer_Tick(objectsource){//操作数据库}publicvoidsss(){PreTimer=newSystem.Threading.Timer(newTimerCallback(preTimer_Tick),this,0,10000);}然后执行sss()成功了但是运行一段时间就停止运行了..不知道什么问题请高手指教...
解决方案
解决方案二:
是不是出错了,比如一次没执行完,下一个操作又来了,造成冲突了
解决方案三:
出错了,objectsource被锁了?
解决方案四:
难道你写在WCF的Service里面了?会超时的帅哥。
解决方案五:
3楼的哥们说到点子上了..请指教...
解决方案六:
3楼的哥们说到点子上了..要怎么写才可以不超时啊..这些不帐号要72小时才可以和你留言...
解决方案七:
写成windows服务算了,帅哥publicstaticvoidWriteLog(stringlog){stringfilename=GetAppPath()+"Log"+DateTime.Today.ToString("yyyyMMdd")+".log";WriteLog(log,filename);}///<summary>///写日志文件///</summary>///<paramname="log">日志字符串</param>///<paramname="filename">日志文件名(包含完整路径)</param>publicstaticvoidWriteLog(stringlog,stringfilename){try{StreamWritersw=File.AppendText(filename);sw.WriteLine(log);sw.Flush();sw.Close();}catch{}}#endregion#region操作系统常用信息获取///<summary>///获取当前路径///</summary>///<returns></returns>publicstaticstringGetAppPath(){stringpath=AppDomain.CurrentDomain.BaseDirectory+@"";returnpath.Replace(@"\",@"");}#endregionprotectedoverridevoidOnStart(string[]args){tmr=newSystem.Timers.Timer();tmr.Interval=Convert.ToDouble(System.Configuration.ConfigurationSettings.AppSettings["timespan"]);//设置计时器事件间隔执行时间tmr.Elapsed+=newSystem.Timers.ElapsedEventHandler(tmr_Elapsed);tmr.Enabled=true;}protectedoverridevoidOnStop(){this.tmr.Enabled=false;}privatevoidtmr_Elapsed(objectsender,System.Timers.ElapsedEventArgse){WriteLog("test");}//privatevoidtmr_Elapsed}//endpublicpartialclassAnalysisService:ServiceBase}
解决方案八:
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Diagnostics;usingSystem.Linq;usingSystem.ServiceProcess;usingSystem.Text;usingSystem.Timers;usingSystem.IO;usingSystem.Data.OracleClient;usingSystem.Configuration;usingSystem.Data.SqlClient;namespaceLogAnalysisService{publicpartialclassAnalysisService:ServiceBase{publicAnalysisService(){InitializeComponent();}System.Timers.Timertmr;#region获取数据集///<summary>///获取dataset///</summary>///<paramname="sql">sql</param>//////<returns>数据集</returns>publicstaticDataSetgetDataSetBySQL(stringsql){StringstrConn=System.Configuration.ConfigurationSettings.AppSettings["ConnStrOrcl"];DataSetds=newDataSet();stringstrSelect=sql;try{OracleConnectionConn=newOracleConnection(strConn);OracleDataAdapterAdapter=newOracleDataAdapter(strSelect,Conn);Adapter.Fill(ds);returnds;}catch{returnnull;}}#endregion#region执行导出数据///<summary>///导出数据///</summary>///<paramname="userid">用户id</param>privatevoidExportData(stringuserId){try{stringrestlogtime=System.Configuration.ConfigurationSettings.AppSettings["restlogtime"];inttaskhour=Int32.Parse(restlogtime);if(DateTime.Now.Hour==taskhour){stringdtstrtmp=DateTime.Now.Date.ToString();stringlogdtstr=DateTime.Parse(dtstrtmp).AddDays(-1).ToString();stringsqlexportdata=@"select*fromtb_tmplogwhere1=1"+@"anddecode(isanalysis,null,0,1)=1andLogTime>=to_date('"+logdtstr+"','yyyy-mm-ddhh24:mi:ss')andAuthor='"+userId+"'";DataSetds=newDataSet();ds=getDataSetBySQL(sqlexportdata);if(ds.Tables[0].Rows.Count>0){ExportTxt(ds);}}}catch(Exceptionerrrr){WriteLog(errrr.ToString());}}#endregion#region导出txt格式数据///<summary>///导出txt格式数据///</summary>///<paramname="ds">待导出数据集</param>privatevoidExportTxt(DataSetds){try{intcount=ds.Tables[0].Rows.Count;//得到数据的行数string[]rowsstr=newstring[count];for(intj=0;j<count;j++){DataRowdr=ds.Tables[0].Rows[j];for(inti=0;i<dr.ItemArray.Length;i++){rowsstr[j]+=dr.ItemArray[i].ToString();rowsstr[j]+="t"+"t";}rowsstr[j]+="n";}stringfilename=GetAppPath()+"txt"+DateTime.Today.ToString("yyyyMMdd")+".txt";FileStreamfs=newFileStream(filename,FileMode.OpenOrCreate,FileAccess.Write);StreamWritersw=newStreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));//通过指定字符编码方式可以实现对汉字的支持,否则在用记事本打开查看会出现乱码sw.Flush();sw.BaseStream.Seek(0,SeekOrigin.Begin);for(inti=0;i<count;i++){sw.WriteLine(rowsstr[i]);}sw.Flush();sw.Close();}catch(Exceptionerrr){WriteLog(errr.ToString());}}#endregion#region带事务操作数据库///<summary>///带事务的批量操作数据。///</summary>///<paramname="sqlInsert">SQL</param>///<returns>操作是否成功</returns>publicstaticboolOperateDatasWithTransaction(List<string>sqlList){OracleConnectionmyConnection=newOracleConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnStrOrcl"]);myConnection.Open();OracleCommandmyCommand=myConnection.CreateCommand();OracleTransactionmyTrans;//StartalocaltransactionmyTrans=myConnection.BeginTransaction(IsolationLevel.ReadCommitted);//AssigntransactionobjectforapendinglocaltransactionmyCommand.Connection=myConnection;myCommand.Transaction=myTrans;try{foreach(stringiteminsqlList){myCommand.CommandText=item;myCommand.ExecuteNonQuery();}myTrans.Commit();returntrue;}catch(Exception){myTrans.Rollback();returnfalse;}finally{myConnection.Close();}}#endregion#region修改config文件///<summary>///修改配置文件///</summary>///<paramname="key">节点名称</param>///<paramname="value">节点数据</param>publicstaticvoidSetConfigValue(stringkey,stringvalue){boolisModified=false;foreach(stringkeyExistinConfigurationManager.AppSettings){if(keyExist==key){isModified=true;}}//OpenApp.ConfigofexecutableConfigurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);//Youneedtoremovetheoldsettingsobjectbeforeyoucanreplaceitif(isModified){config.AppSettings.Settings.Remove(key);}//AddanApplicationSetting.config.AppSettings.Settings.Add(key,value);//SavethechangesinApp.configfile.config.Save(ConfigurationSaveMode.Modified);//Forceareloadofachangedsection.ConfigurationManager.RefreshSection("appSettings");}#endregion#region日志相关///<summary>///写日志文件///</summary>///<paramname="log"></param>publicstaticvoidWriteLog(stringlog){stringfilename=GetAppPath()+"Log"+DateTime.Today.ToString("yyyyMMdd")+".log";WriteLog(log,filename);}///<summary>///写日志文件///</summary>///<paramname="log">日志字符串</param>///<paramname="filename">日志文件名(包含完整路径)</param>publicstaticvoidWriteLog(stringlog,stringfilename){try{StreamWritersw=File.AppendText(filename);sw.WriteLine(log);sw.Flush();sw.Close();}catch{}}#endregion#region操作系统常用信息获取///<summary>///获取当前路径///</summary>///<returns></returns>publicstaticstringGetAppPath(){stringpath=AppDomain.CurrentDomain.BaseDirectory+@"";returnpath.Replace(@"\",@"");}#endregionprotectedoverridevoidOnStart(string[]args){tmr=newSystem.Timers.Timer();tmr.Interval=Convert.ToDouble(System.Configuration.ConfigurationSettings.AppSettings["timespan"]);//设置计时器事件间隔执行时间tmr.Elapsed+=newSystem.Timers.ElapsedEventHandler(tmr_Elapsed);tmr.Enabled=true;}protectedoverridevoidOnStop(){this.tmr.Enabled=false;}privatevoidtmr_Elapsed(objectsender,System.Timers.ElapsedEventArgse){WriteLog("test");}//privatevoidtmr_Elapsed}//endpublicpartialclassAnalysisService:ServiceBase}
解决方案九:
为啥不用数据库代理作业呢?简单方便,执行所占的资源应该也比你这个少...