|
|
|
รบกวนผู้รู้ช่วยตอบคำถาม Project เกี่ยวกับการ update ข้อมูลจาก MSSQL2000 ไปบน Mysql ทุก ๆ 1 ชั่วโมงหน่อยค่ะ |
|
|
|
|
|
|
|
ตอนนี้กำลังทำ Project ให้มีการ update ข้อมูลสินค้าคงเหลือ โดยข้อมูลจะอยู่ที่ Ms sql 2000 ซึ่งเป็นข้อมูล master ไปรับปรุงข้อมูลใน Mysql ซึ่งเป็นฐานข้อมูลของเว็บขายของ โดยจะทำการ update ทุก ๆ 1 ชั่วโมงโดยใช้ visual c# 2008 ค่ะ ซึ่งตอนนี้ตั้งไว้ว่าใ้ห้ทำการปรับปรุงข้อมูล ทุก ๆ นาทีที่ 30 ค่ะ แต่ปัญหาอยู่ตรงที่ พอ timer วิ่งไปถึงนาทีที่ 30 แล้ว ทำงานปกติ พอนาทีที่ 31 มันหยุดทำงานเลยทั้ง ๆ ยังทำการ update ข้อมูลไม่เสร็จ ไม่ทราบว่าต้องไปทำตรงไหนต่อเพื่อที่จะให้เวลายัง run ต่อไปเรื่อย ๆ โดยไม่ต้องสนใจว่าจะทำการ update อยู่ หรือไม่ แต่ถ้าถึงเวลาการ update ข้อมูลก็ให้ทำงานไปเลย ลักษณะเหมือนมีงานแทรกเข้ามาในช่วงเวลานั้น ๆ อ่ะค่ะ
ฟอร์ม
โค๊ด (เป็นโค๊ดที่ทดสอบการวิ่งของเวลาอ่ะค่ะ ยังไม่ได้ใส่ในส่วนของการ ลอง update จริง ๆ ค่ะ)
Code (C#)
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.Data.SqlClient;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace internalStock1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Load += new EventHandler(Form1_Load);
}
public Timer timer = new Timer();
public SqlConnection cx=null;
public MySqlConnection conMysql=null;
public DateTime rsDate;
public SqlDataReader dtReader=null;
public SqlDataReader dtReader2=null;
public SqlCommand objCmd = null;
String connectionString = "Data Source=nbx;Database=domestic;Integrated Security=SSPI";
private void Form1_Load(object sender, EventArgs e)
{
timer.Start();
timer.Tick += new EventHandler(nowTimer_Tick);
}
private void nowTimer_Tick(object sender, EventArgs e)
{
cx = new SqlConnection();
cx.ConnectionString = connectionString;
try
{
cx.Open();
}
catch (Exception e2)
{
label1.Text = "Error MySql : " + e2.Message.ToString();
}
finally
{
if (cx.State == ConnectionState.Closed)
{
cx.Open();
}
}
string sqlGetTime = "SELECT GetDate()";
objCmd = new SqlCommand(sqlGetTime, cx);
dtReader = objCmd.ExecuteReader();
int tmpMM = 0;
if(dtReader.Read())
{
rsDate = dtReader.GetDateTime(0);//Execute(sqlGetTime);
rsDatetxt.Text = "" + rsDate;
txt_minute.Text = rsDate.Minute.ToString();
int rsMM = rsDate.Minute;
int rsSS = rsDate.Second;
txtHH.Text = rsDate.Hour.ToString();
txtMM.Text = rsDate.Minute.ToString();
txtSS.Text = rsDate.Second.ToString();
if ((rsMM == 43)&&(rsSS==0)) { timeUpdate(rsMM,rsSS); }
}
objCmd.Dispose();
dtReader.Dispose();
dtReader.Close();
dtReader = null;
cx.Close();
}
public void timeUpdate(int rsMM,int rsSS)
{
if (rsMM == 30)
{
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
progressBar1.Step = 1;
if (progressBar1.Value < 100)
{
progressBar1.Value += 1;
label2.Text = progressBar1.Value.ToString() + "%";
}
if (progressBar1.Value >= 100)
{
nowTimer.Enabled = false;
MessageBox.Show("Completed.", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
progressBar1.Value = 0;
label2.Text = "0%";
}
}
conn.Close();
conMysql.Close();
}
}
}
Tag : .NET, MySQL, Ms SQL Server 2005, C#
|
|
|
|
|
|
Date :
2010-11-20 10:25:42 |
By :
koi_29 |
View :
1262 |
Reply :
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองทำตามนี้ดูครับ เป็นการเพิ่ม flag เพื่อช่วยตรวจสอบดูว่างานทำเสร็จหรือยัง เพราะคุณตั้งเงื่อนไขว่า min == 30 พอ 31 มันก็ไม่เข้าเงื่อนไขมันก็ไม่ทำถูกแล้วครับ ลองดูครับ
Code (C#)
<font class="detailDesc"><font class="css_code">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.Data.SqlClient;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace internalStock1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Load += new EventHandler(Form1_Load);
}
public Timer timer = new Timer();
public SqlConnection cx=null;
public MySqlConnection conMysql=null;
public DateTime rsDate;
public SqlDataReader dtReader=null;
public SqlDataReader dtReader2=null;
public SqlCommand objCmd = null;
private bool bDoJob = false; //เพิ่ม flag สำหรับตรวจการทำงาน
String connectionString = "Data Source=nbx;Database=domestic;Integrated Security=SSPI";
private void Form1_Load(object sender, EventArgs e)
{
timer.Start();
timer.Tick += new EventHandler(nowTimer_Tick);
}
private void nowTimer_Tick(object sender, EventArgs e)
{
cx = new SqlConnection();
cx.ConnectionString = connectionString;
try
{
cx.Open();
}
catch (Exception e2)
{
label1.Text = "Error MySql : " + e2.Message.ToString();
}
finally
{
if (cx.State == ConnectionState.Closed)
{
cx.Open();
}
}
string sqlGetTime = "SELECT GetDate()";
objCmd = new SqlCommand(sqlGetTime, cx);
dtReader = objCmd.ExecuteReader();
int tmpMM = 0;
if(dtReader.Read())
{
rsDate = dtReader.GetDateTime(0);//Execute(sqlGetTime);
rsDatetxt.Text = "" + rsDate;
txt_minute.Text = rsDate.Minute.ToString();
int rsMM = rsDate.Minute;
int rsSS = rsDate.Second;
txtHH.Text = rsDate.Hour.ToString();
txtMM.Text = rsDate.Minute.ToString();
txtSS.Text = rsDate.Second.ToString();
if ((rsMM == 43)&&(rsSS==0)) { timeUpdate(rsMM,rsSS); }
}
objCmd.Dispose();
dtReader.Dispose();
dtReader.Close();
dtReader = null;
cx.Close();
}
public void timeUpdate(int rsMM,int rsSS)
{
if (rsMM == 30 || bDoJob == true)
{
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
progressBar1.Step = 1;
if (progressBar1.Value < 100)
{
bDoJob = true; //เปิดไว้จนกว่า progress จะเต็ม
progressBar1.Value += 1;
label2.Text = progressBar1.Value.ToString() + "%";
}
if (progressBar1.Value >= 100)
{
bDoJob = false; //ถ้า progress ครบ 100 ใ้ห้ปิดเพื่อไม่ให้เข้ามาทำงานใน function นี้อีก
nowTimer.Enabled = false;
MessageBox.Show("Completed.", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
progressBar1.Value = 0;
label2.Text = "0%";
}
}
conn.Close();
conMysql.Close();
}
}
}
</font></font>
|
ประวัติการแก้ไข 2010-11-20 10:41:37
|
|
|
|
Date :
2010-11-20 10:39:52 |
By :
salapao_codeman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทำได้แล้วค่ะ เพิ่มเติมตามแนวทางที่คุณ codeman แนะนำ ขอบคุณมากค่ะ
|
|
|
|
|
Date :
2010-11-25 13:42:46 |
By :
koi_29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|