c#窗体应用程序实现当软件开启,定时器就在数据库扫描是否有设置的良品和不良品条码的当天ICT测试记录(ICT_test表中Barcode,Date,Result),良品和不良品条码在本地文件夹txt文件中获取。如果数据库中有良品和不良品测试记录存在,lable状态栏变绿并提示“已点检,请进行测试”,然后进行别的条码的ICT测试。(条码先扫描到c#窗体软件txt_barcode中,在通过模拟键盘定位发送到ICT测试软件条码框中,然后进行ICT测试)。如果没有,label状态栏变红,并提示“请进行测试前点检”,然后就先进行设置条码的ICT测试,判断扫描到txt_Barcode条码是否为获取到设置的良品或不良品条码,如输入的条码不符合,label状态栏变红,并提示“条码错误”,如输入的条码正确并为设置的良品条码,label状态栏变绿,并提示“请进行良品点检”,进行ICT测试,当发现某一文件夹中有良品测试报告生成,表示良品测试完成,测试完成后就提示“良品点检完成”。如扫描的是设置的不良品条码,则label状态栏变绿,并提示“请进行不良品点检”,进行ICT测试。当发现某一文件夹中有不良品测试报告生成,表示不良品测试完成。当这设置的两个条码都测试完成后,将测试记录直接更新到数据库,不需要点击上传c#代码实现.
时间: 2023-11-25 09:04:49 浏览: 69
以下是一个简单的实现方式,可以参考:
1. 在窗体的Load事件中,启动定时器,并设置其Tick事件的处理方法为ScanDatabase。
2. 在ScanDatabase方法中,使用SQL语句从数据库中查询设置的良品和不良品条码当天的测试记录,如果存在,则更新状态栏Label的文本为“已点检,请进行测试”,并将isReady字段设为true;否则更新状态栏Label的文本为“请进行测试前点检”,并将isReady字段设为false。
3. 在扫描到txt_Barcode条码时,判断isReady字段的值,如果为true,则判断扫描到的条码是否为设置的良品或不良品条码,如果是,则将状态栏Label的文本更新为“请进行良品点检”或“请进行不良品点检”,并进行ICT测试;否则将状态栏Label的文本更新为“条码错误”。
4. 在良品或不良品点检完成后,检查相应的测试报告文件夹是否存在测试报告文件,如果存在,则将测试记录更新到数据库,并将状态栏Label的文本更新为“良品点检完成”或“不良品点检完成”。
5. 在窗体关闭时,停止定时器。
下面是示例代码:
```csharp
public partial class MainForm : Form
{
private bool isReady = false; // 是否可以进行测试
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
// 启动定时器,每5秒扫描一次数据库
timer1.Interval = 5000;
timer1.Tick += new EventHandler(ScanDatabase);
timer1.Start();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
// 关闭窗体时停止定时器
timer1.Stop();
}
private void ScanDatabase(object sender, EventArgs e)
{
string today = DateTime.Today.ToString("yyyy-MM-dd");
string sql = "SELECT * FROM ICT_test WHERE Date='" + today + "' AND (Barcode='" + txt良品条码.Text + "' OR Barcode='" + txt不良品条码.Text + "')";
DataTable dt = ExecuteQuery(sql);
if (dt.Rows.Count > 0)
{
// 数据库中有设置的良品或不良品当天测试记录
lblStatus.ForeColor = Color.Green;
lblStatus.Text = "已点检,请进行测试";
isReady = true;
}
else
{
// 数据库中没有设置的当天测试记录
lblStatus.ForeColor = Color.Red;
lblStatus.Text = "请进行测试前点检";
isReady = false;
}
}
private void txtBarcode_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
string barcode = txtBarcode.Text.Trim();
if (isReady)
{
if (barcode == txt良品条码.Text)
{
lblStatus.ForeColor = Color.Green;
lblStatus.Text = "请进行良品点检";
DoICTTest(barcode);
}
else if (barcode == txt不良品条码.Text)
{
lblStatus.ForeColor = Color.Green;
lblStatus.Text = "请进行不良品点检";
DoICTTest(barcode);
}
else
{
lblStatus.ForeColor = Color.Red;
lblStatus.Text = "条码错误";
}
}
else
{
lblStatus.ForeColor = Color.Red;
lblStatus.Text = "请进行测试前点检";
}
}
}
private void DoICTTest(string barcode)
{
// 发送条码到ICT测试软件
SendBarcodeToICT(barcode);
// 等待测试完成,检查测试报告文件夹
string reportFolder = GetReportFolder(barcode);
while (!File.Exists(reportFolder + "\\" + barcode + ".txt"))
{
Thread.Sleep(1000);
}
// 更新测试记录到数据库
string today = DateTime.Today.ToString("yyyy-MM-dd");
string result = GetTestResult(barcode);
string sql = "UPDATE ICT_test SET Result='" + result + "' WHERE Date='" + today + "' AND Barcode='" + barcode + "'";
ExecuteNonQuery(sql);
// 更新状态栏
if (barcode == txt良品条码.Text)
{
lblStatus.Text = "良品点检完成";
}
else
{
lblStatus.Text = "不良品点检完成";
}
}
private DataTable ExecuteQuery(string sql)
{
// 执行SQL查询语句,返回查询结果
string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword";
SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter dataAdapter = new SqlDataAdapter(sql, connection);
DataTable dataTable = new DataTable();
dataAdapter.Fill(dataTable);
return dataTable;
}
private void ExecuteNonQuery(string sql)
{
// 执行SQL非查询语句,如UPDATE、INSERT、DELETE等
string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword";
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(sql, connection);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
private void SendBarcodeToICT(string barcode)
{
// 将条码发送到ICT测试软件
// TODO: 实现发送逻辑
}
private string GetReportFolder(string barcode)
{
// 根据条码获取对应的测试报告文件夹路径
// TODO: 实现获取逻辑
}
private string GetTestResult(string barcode)
{
// 根据条码获取对应的测试结果,如PASS或FAIL
// TODO: 实现获取逻辑
}
}
```
阅读全文