返回主站|会员中心|保存桌面

AB罗克韦尔服务商    

PLC、变频器、人机界面、传感器

联系方式
  • 联系人:吴经理
  • 电话:18576370666
新闻分类
  • 暂无分类
首页 > 新闻中心 > C# 3U+SQL+BarCodeSCAN!
新闻中心
C# 3U+SQL+BarCodeSCAN!
发布时间:2025-08-11        浏览次数:0        返回列表

在C#中结合SQL数据库和条码扫描(BarCode Scan)功能,可以构建一个完整的条码数据采集与管理系统。以下是分步骤的实现方案,涵盖硬件对接、数据库设计和代码实现:


一、系统架构设计

  1. 硬件层

    • 条码扫描枪(支持键盘模拟或串口/USB通信)

    • 工业PC或普通计算机(运行C#程序)

  2. 数据层

    • SQL Server/MySQL/SQLite 数据库(存储条码数据及相关业务信息)

  3. 应用层

    • C# WinForms/WPF 应用程序(处理条码输入、数据库交互和业务逻辑)


二、数据库设计(SQL示例)

以SQL Server为例,创建存储条码数据的表:

sqlCREATE TABLE BarcodeData (Id INT PRIMARY KEY IDENTITY(1,1),Barcodevalue NVARCHAR(50) NOT NULL,ProductName NVARCHAR(100),ScanTime DATETIME DEFAULT GETDATE(),Operator NVARCHAR(50),Status TINYINT DEFAULT 0 -- 0:未处理, 1:已处理);

三、C#实现步骤

1. 条码扫描输入处理

  • 键盘模拟扫描枪:直接监听文本框输入(回车键触发提交)。

  • 串口扫描枪:通过System.IO.Ports读取数据。

示例代码(键盘模拟)

csharp

using System;
using System.Data.SqlClient;
using System.Windows.Forms;

public partial class MainForm : Form
{
private readonly string _connectionString = "Server=.;Database=BarcodeDB;Integrated Security=True;";

public MainForm()
{
InitializeComponent();
txtBarcode.KeyDown += TxtBarcode_KeyDown; // 绑定回车事件
}

private void TxtBarcode_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
string barcode = txtBarcode.Text.Trim();
if (!string.IsNullOrEmpty(barcode))
{
SaveBarcodeToDatabase(barcode);
txtBarcode.Clear();
}
}
}

private void SaveBarcodeToDatabase(string barcode)
{
using (var connection = new SqlConnection(_connectionString))
{
string query = "INSERT INTO BarcodeData (Barcodevalue, Operator) VALUES (@Barcode, @Operator)";
var command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Barcode", barcode);
command.Parameters.AddWithValue("@Operator", Environment.UserName);

connection.Open();
command.ExecuteNonQuery();
}
MessageBox.Show($"条码 {barcode} 已保存!");
}
}

2. 串口扫描枪实现

csharp

using System.IO.Ports;

public partial class MainForm : Form
{
private SerialPort _serialPort;

public MainForm()
{
InitializeComponent();
_serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
_serialPort.DataReceived += SerialPort_DataReceived;
_serialPort.Open();
}

private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string barcode = _serialPort.ReadLine().Trim();
this.Invoke((MethodInvoker)delegate { SaveBarcodeToDatabase(barcode); });
}
}

3. 数据库查询与展示

csharp

private void btnQuery_Click(object sender, EventArgs e)
{
using (var connection = new SqlConnection(_connectionString))
{
string query = "SELECT * FROM BarcodeData WHERE ScanTime BETWEEN @Start AND @End";
var command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Start", dtpStart.Value);
command.Parameters.AddWithValue("@End", dtpEnd.Value);

var adapter = new SqlDataAdapter(command);
var dataTable = new DataTable();
adapter.Fill(dataTable);
dataGridView.DataSource = dataTable;
}
}

四、关键功能扩展

  1. 条码校验

    csharpprivate bool IsValidBarcode(string barcode){// 示例:校验EAN-13格式return barcode.Length == 13 && long.TryParse(barcode, out _);}
  2. 重复扫描拦截

    csharpprivate bool IsDuplicate(string barcode){using (var connection = new SqlConnection(_connectionString)){string query = "SELECT COUNT(1) FROM BarcodeData WHERE Barcodevalue = @Barcode";var command = new SqlCommand(query, connection);command.Parameters.AddWithValue("@Barcode", barcode);connection.Open();return (int)command.ExecuteScalar() > 0;}}
  3. 导出到Excel
    使用EPPlus库:

    csharp

    using OfficeOpenXml;

    private void ExportToExcel(DataTable data)
    {
    using (var package = new ExcelPackage())
    {
    var worksheet = package.Workbook.Worksheets.Add("条码数据");
    worksheet.Cells["A1"].LoadFromDataTable(data, true);
    package.SaveAs(new FileInfo(@"C:\BarcodeData.xlsx"));
    }
    }

五、部署与优化

  1. 硬件兼容性

    • 测试不同品牌扫描枪(如Honeywell、Zebra)的通信协议。

    • 处理扫码枪的前缀/后缀字符(如\r\n)。

  2. 性能优化

    • 对高频扫描场景使用批量插入(SqlBulkCopy)。

    • 添加数据库索引加速查询:

      sqlCREATE INDEX IX_Barcode_Time ON BarcodeData(ScanTime);
  3. 异常处理

    csharptry{connection.Open();command.ExecuteNonQuery();}catch (SqlException ex){LogError(ex.Message);MessageBox.Show("数据库写入失败!");}

六、完整项目结构

BarcodeScannerApp/├── MainForm.cs          # 主界面├── DatabaseHelper.cs    # 数据库操作封装├── Barcodevalidator.cs  # 条码校验逻辑└── App.config           # 数据库连接字符串

通过以上方案,可实现一个稳定的条码扫描系统,适用于生产物流、仓储管理等场景。根据实际需求,可进一步集成条码打印、Web API或云同步功能。

收缩
  • 电话咨询

  • 18576370666
  • 添加微信客服