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-27 20:05:56 浏览: 74
定时器控件-c#窗体应用程序
以下是基于你提供的需求的C#代码实现,其中使用了System.Data.SqlClient库进行数据库连接和操作,以及System.IO库进行文件读写操作。
首先,在窗体中添加一个定时器timer1和一个label控件labelStatus,用于显示当前的状态。
在窗体的Load事件中初始化定时器和label控件:
```
private void Form1_Load(object sender, EventArgs e)
{
// 初始化定时器
timer1.Interval = 60000; // 每隔1分钟扫描一次数据库
timer1.Enabled = true;
timer1.Tick += new EventHandler(timer1_Tick);
// 初始化label控件
labelStatus.Text = "请进行测试前点检";
labelStatus.BackColor = Color.Red;
}
```
然后,在timer1_Tick事件中编写扫描数据库的逻辑:
```
private void timer1_Tick(object sender, EventArgs e)
{
// 连接数据库
SqlConnection conn = new SqlConnection("Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD");
conn.Open();
// 扫描良品条码
string goodBarcodeFile = @"C:\good_barcode.txt";
if (File.Exists(goodBarcodeFile))
{
string[] goodBarcodes = File.ReadAllLines(goodBarcodeFile);
foreach (string barcode in goodBarcodes)
{
// 查询数据库是否有当天的ICT测试记录
string sqlQuery = "SELECT COUNT(*) FROM ICT_test WHERE Barcode=@barcode AND Date=@date AND Result='PASS'";
SqlCommand cmd = new SqlCommand(sqlQuery, conn);
cmd.Parameters.AddWithValue("@barcode", barcode);
cmd.Parameters.AddWithValue("@date", DateTime.Today.ToShortDateString());
int count = (int)cmd.ExecuteScalar();
if (count > 0)
{
// 良品测试记录已存在
labelStatus.Text = "已点检,请进行测试";
labelStatus.BackColor = Color.Green;
return;
}
}
}
// 扫描不良品条码
string badBarcodeFile = @"C:\bad_barcode.txt";
if (File.Exists(badBarcodeFile))
{
string[] badBarcodes = File.ReadAllLines(badBarcodeFile);
foreach (string barcode in badBarcodes)
{
// 查询数据库是否有当天的ICT测试记录
string sqlQuery = "SELECT COUNT(*) FROM ICT_test WHERE Barcode=@barcode AND Date=@date AND Result='FAIL'";
SqlCommand cmd = new SqlCommand(sqlQuery, conn);
cmd.Parameters.AddWithValue("@barcode", barcode);
cmd.Parameters.AddWithValue("@date", DateTime.Today.ToShortDateString());
int count = (int)cmd.ExecuteScalar();
if (count > 0)
{
// 不良品测试记录已存在
labelStatus.Text = "已点检,请进行测试";
labelStatus.BackColor = Color.Green;
return;
}
}
}
// 没有测试记录
labelStatus.Text = "请进行测试前点检";
labelStatus.BackColor = Color.Red;
// 关闭数据库连接
conn.Close();
}
```
当label状态栏变为绿色并提示“已点检,请进行测试”后,可以进行别的条码的ICT测试。测试完成后,可以将测试记录上传到数据库,代码如下:
```
private void UploadICTTestRecord(string barcode, string result)
{
// 连接数据库
SqlConnection conn = new SqlConnection("Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD");
conn.Open();
// 插入ICT测试记录
string sqlInsert = "INSERT INTO ICT_test (Barcode, Date, Result) VALUES (@barcode, @date, @result)";
SqlCommand cmd = new SqlCommand(sqlInsert, conn);
cmd.Parameters.AddWithValue("@barcode", barcode);
cmd.Parameters.AddWithValue("@date", DateTime.Today.ToShortDateString());
cmd.Parameters.AddWithValue("@result", result);
cmd.ExecuteNonQuery();
// 关闭数据库连接
conn.Close();
}
```
在扫描到txt_Barcode条码后,可以调用UploadICTTestRecord方法将测试记录上传到数据库。
需要注意的是,上传测试记录的代码应该放在ICT测试完成后的回调函数中,因为ICT测试可能会失败或者出现异常,此时不应该将测试记录上传到数据库。
阅读全文