后台单线程每隔一定时间自动更新,从oracle数据库用两种方式读取数据,并将数据导出到DBF文件。

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Net;

using System.Data.OracleClient;

using System.Threading;

using System.Data.Odbc;

namespace RealtimeReadOrcaleSite

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

WebpageCrawling();

//SqlInterface();

}

//每隔一定时间自动抓取网页数据,并更新数据库

private void WebpageCrawling()

{

//创建线程

Thread mythread = new Thread(UpdateCrawlingThread);

mythread.SetApartmentState(ApartmentState.STA);//属性设置成单线程

mythread.IsBackground = true;//设置为后台线程

mythread.Start();

}

//单线程,每隔一段时间抓取一次

private void UpdateCrawlingThread(Object state)

{

while (true)

{

OneCrawling();

Thread.Sleep(10 * 60 * 1000);//毫秒为单位

}

}

//一次抓取过程

private void OneCrawling()

{

//时间性能测试

DateTime starttime = DateTime.Now;

try

{

string strConn = "data source=portal_rac;user id=name_user;password=name_user123";

using (OracleConnection oracleConn = new OracleConnection(strConn))

{

oracleConn.Open();

OracleCommand oracleCommand = oracleConn.CreateCommand();

string strComm = " SELECT stano FROM observe.ele_awst_traffic3";

//oracleCommand.CommandText = strComm;

//OracleDataReader oracleReader = oracleCommand.ExecuteReader();//C#的话,如果返回结果超过500行,建议使用DataAdapter,返回少量行数,就像分页显示的,

////建议用,DataReader前者适合于返回大量数据,后者适合返回小量数据。

//int i = 0;

//while (oracleReader.Read())

//{

// break;

// i++;

// //MessageBox.Show("1", oracleReader[0].ToString());

// //break;

// if (i % 10000 == 0)

// {

// MessageBox.Show(i.ToString(), oracleReader[0].ToString());

// }

//}

//MessageBox.Show(oracleReader.VisibleFieldCount.ToString(), oracleReader[18].ToString());

//oracleReader.Close();

OracleDataAdapter myda = new OracleDataAdapter(strComm, oracleConn);

DataSet myds = new DataSet();

myda.Fill(myds, "temp");

//MessageBox.Show(myds.Tables["temp"].Rows[0]["TEMP"].ToString());

oracleConn.Close();//

System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection();

string table = @"C:\test.dbf";

string connStr = @"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + table + ";Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO";

conn.ConnectionString = connStr;

conn.Open();

OdbcCommand cmd = new OdbcCommand();

cmd.Connection = conn;

string sql = "CREATE TABLE " + table + " (cc int(10));";

sql += "insert into " + table + " (stano) values (33000);";

cmd.CommandText = sql;

cmd.CommandType = CommandType.Text;

cmd.ExecuteNonQuery();

//sql = @"select * from " + table;

//OdbcDataAdapter da = new OdbcDataAdapter(sql, conn);

//DataTable dt = new DataTable();

//da.Fill(dt);

//this.GridView1.DataSource = dt.DefaultView;

//this.GridView1.DataBind();

}

}

catch (WebException webEx)

{

Console.WriteLine(webEx.Message.ToString());

}

//时间性能测试

DateTime endtime = DateTime.Now;

System.TimeSpan ts = endtime.Subtract(starttime);

MessageBox.Show("ok\n" + Convert.ToString(ts.TotalMilliseconds) + "ms");

}

//执行SQL数据存储语句

private void Insert(string sqlstr)

{

}

}

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐