[新手]一个方法timer执行第二次出错

a5114122 2017-08-09 03:48:52
写了个windows服务,第一次可以更新数据库,但再等一分钟就不更新了,在控制台程序用直接调用几次都没问题,
在catch里写了个输出错误信息,结果也没有写,不太熟悉c#,希望高手能帮我解答一下

public void times()
{
timer = new System.Timers.Timer();
timer.Enabled = true;
timer.Interval = 60000;//执行间隔时间,单位为毫秒
timer.Start();
timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
}
private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{

Get_monitordata();
}

public void Get_monitordata()
{

using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "running.");

}

try
{
//判断
if (conn.State == System.Data.ConnectionState.Closed)
{
conn = db.conn(db.sqlConnectionCommand);
}
if (conn1.State == System.Data.ConnectionState.Closed)
{
conn1 = db.conn(db.sqlConnectionCommand1);
}





//多张表

for (int i = 0; i < DbUtil.table1.Length; i++)
{

maxdate[i] = this.selectMaxDate(DbUtil.table2[i]);

if (maxID == maxIDinit)
{
maxID = this.selectMaxid(DbUtil.table2[i]);
}

DataSet ds = db.selectData(conn, "SELECT * FROM ( SELECT * FROM " + DbUtil.table1[i] + " WHERE TIMESTAMP > TO_DATE('" + maxdate[i] + "','yyyy/MM/dd hh24:mi:ss') ORDER BY TIMESTAMP ASC) WHERE ROWNUM < 101 ", DbUtil.table1[i]);
DataTable dt = ds.Tables[DbUtil.table1[i]];

// DataSet ds2 = db.selectData(conn1, "SELECT * FROM "+ DbUtil.table2[i] +"WHERE 1=0", DbUtil.table2[i]);
// DataTable dt2 = ds2.Tables[DbUtil.table2[i]];

OracleCommand sqlCommand = new OracleCommand("SELECT * FROM " + DbUtil.table2[i] + " WHERE 1=0", conn1);
OracleDataAdapter sqlDataAdapter = new OracleDataAdapter();
sqlDataAdapter.SelectCommand = sqlCommand;
DataSet ds2 = new DataSet();
sqlDataAdapter.Fill(ds2, DbUtil.table2[i]);

DataTable dt2 = ds2.Tables[DbUtil.table2[i]];
//dt2.Columns.Add("FLAG",typeof(int));
for (int j = 0; j < dt.Rows.Count; j++)
{
DataRow dr = dt2.NewRow();
dr["FLAG"] = 1;
foreach (DataColumn column in dt.Columns)
{
if (column.ColumnName .Equals("ID"))
{
dr[column.ColumnName] = (++maxID);

continue;
}

dr[column.ColumnName] = dt.Rows[j][column];

}

dt2.Rows.Add(dr);

}
OracleCommandBuilder ocb = new OracleCommandBuilder(sqlDataAdapter);
sqlDataAdapter.Update(ds2, DbUtil.table2[i]);
sqlCommand.Dispose();

using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "succ");

}

// maxdate[i] = dt.Rows[dt.Rows.Count - 1]["TIMESTAMP"]+"";
//maxid[i] = int.Parse(dt.Rows[dt.Rows.Count - 1]["ID"]+"");
}
}
catch(Exception e)
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + e.Message+"\n"+e.StackTrace);

}
return;
}
}
...全文
189 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
a5114122 2017-08-09
  • 打赏
  • 举报
回复
找到原因了,我改了sql语句 现在可以了,但是那个语句竟然只能成功执行一次 ,真是无法想象,结帖了,一下午终于解决了
nanfei01055 2017-08-09
  • 打赏
  • 举报
回复
把 fill 那句执行的 SQL 找出来,把这个方法贴到一个新建的常规项目里,就可以方便调试了呀。 从错误来看,怀疑查出出来的列中有特殊字段不被支持,无法映射到datatable里。
a5114122 2017-08-09
  • 打赏
  • 举报
回复
引用 5 楼 xdashewan 的回复:
[quote=引用 4 楼 a5114122 的回复:] 出了什么问题
+ SafeMapping “sqlDataAdapter.SafeMapping”引发了类型“System.NotSupportedException”的异常 System.Collections.Hashtable {System.NotSupportedException} 第一次可以,第二次这样 [/quote] 这异常不容易判断,你可以看看是否有启发https://community.oracle.com/thread/2496563[/quote] SELECT * FROM (SELECT * FROM DEVICE_FLOWMETER T WHERE T.TIMESTAMP > TO_DATE('2010/1/1 1:1:1','YYYY-MM-DD HH24:MI:SS') ORDER BY T.TIMESTAMP) WHERE ROWNUM<100 SELECT * FROM(SELECT * FROM DEVICE_FLOWMETER T WHERE T.TIMESTAMP > TO_DATE('2014/8/15 19:22:00','yyyy/MM/dd hh24:mi:ss') ORDER BY T.TIMESTAMP ) WHERE ROWNUM < 100 上面可以 下面不行 你能想象吗
xdashewan 2017-08-09
  • 打赏
  • 举报
回复
引用 4 楼 a5114122 的回复:
出了什么问题
+ SafeMapping “sqlDataAdapter.SafeMapping”引发了类型“System.NotSupportedException”的异常 System.Collections.Hashtable {System.NotSupportedException} 第一次可以,第二次这样 [/quote] 这异常不容易判断,你可以看看是否有启发https://community.oracle.com/thread/2496563
a5114122 2017-08-09
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
[quote=引用 2 楼 a5114122 的回复:] 我加载到进程调试了下 发现在 Fill那句出了问题,运行没有超过一分钟
出了什么问题[/quote] + SafeMapping “sqlDataAdapter.SafeMapping”引发了类型“System.NotSupportedException”的异常 System.Collections.Hashtable {System.NotSupportedException} 第一次可以,第二次这样
xdashewan 2017-08-09
  • 打赏
  • 举报
回复
引用 2 楼 a5114122 的回复:
我加载到进程调试了下 发现在 Fill那句出了问题,运行没有超过一分钟
出了什么问题
a5114122 2017-08-09
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
运行一次超过一分钟吗,如果有可能,那么connection就不能共用一个,每次要重新申请connection
public DataSet selectData(OracleConnection conn,String sqlSelect,String tablename) { OracleCommand sqlCommand = new OracleCommand(sqlSelect, conn); OracleDataAdapter sqlDataAdapter = new OracleDataAdapter(); sqlDataAdapter.SelectCommand = sqlCommand; DataSet dsDataSet = new DataSet(); sqlDataAdapter.Fill(dsDataSet, tablename); sqlCommand.Dispose(); return dsDataSet; } 我加载到进程调试了下 发现在 Fill那句出了问题,运行没有超过一分钟
xdashewan 2017-08-09
  • 打赏
  • 举报
回复
运行一次超过一分钟吗,如果有可能,那么connection就不能共用一个,每次要重新申请connection

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧