WinCC OA-CTRL-操作MySQL数据库
目的
有的时候我们需要 将WinCC OA里的数据定时的导出,这无可避免的要用到数据库,
今天就来带领大家 使用control脚本通过ODBC 连接mysql 数据库,读取并写入数据.
什么是ODBC?
先套用百度百科:开放数据库连接(Open Database Connectivity,ODBC)是为解决异构数据库间的数据共享而产生的,
现已成为WOSA(The Windows Open System Architecture(Windows开放系统体系结构))的主要部分和基于Windows环境的一种数据库访问接口标准ODBC 为异构数据库访问提供统一接口,
允许应用程序以SQL 为数据存取标准,存取不同DBMS管理的数据;
使应用程序直接操纵DB中的数据,免除随DB的改变而改变。用ODBC 可以访问各类计算机上的DB文件,甚至访问如Excel 表和ASCI I数据文件这类非数据库对象。
废话太多了,一张图概括
简而言之 ,就是我在windows 操作系统里要访问数据库(多种数据库)可以通过微软提供的ODBC这个程序,
使用统一的接口与数据库交互,这样就不用考虑数据库多样性的差异,简化了数据库的操作难度及复杂度
连接数据库
OK 知道原理后,来撸点代码
1) 下载MySQL ODBC 驱动并配置
ODBC 程序为windows 提供的,但是不同数据库的驱动需要我么手动下载 下载链接ttps://dev.mysql.com/downloads/connector/odbc/
按图示配置ODBC 连接
2) 读取数据库内容
我们在WinCC OA 里新建了一个panel 添加了个按钮,对点击事件进行编辑
main(mapping event) { int rc; //声明一个dbconnectin类型conn用来管理数据库连接 dbConnection conn; //连接语句 DNS 刚刚起的ODBC实例名字 UID数据库用户名 string conStr = "DSN=WINCCOA;UID=eric;PWD=123456;"; //打开 ODBC 连接 rc = dbOpenConnection(conStr,conn); //SQL 查询语句 string queryStr = "SELECT * FROM pump_station"; //定义一个查询结果集存放数据类型rs dbRecordset rs; //执行SQL语句 rc = dbOpenRecordset (conn, queryStr, rs); if (!rc) { //遍历结果集 打印取出结果 while (!rc && !dbEOF (rs)) { anytype id,name,addr; rc = dbGetField (rs, 0, id); rc = dbGetField (rs, 1, name); rc = dbGetField (rs, 2, addr); DebugN(id,name,addr); rc = dbMoveNext (rs); } dbCloseRecordset (rs); } //关闭数据库 dbCloseConnection(conn); }
现在运行下 查看结果
可以看到查询结果与数据库内容一致
3) 插入语句
同样的套路(建panel增加按钮) 直接上代码
main(mapping event) { int rc = 0; //声明一个dbconnectin类型conn用来管理数据库连接 dbConnection conn; //连接语句 DNS 刚刚起的ODBC实例名字 UID数据库用户名 string conStr = "DSN=WINCCOA;UID=eric;PWD=123456;"; //打开 ODBC 连接 rc = dbOpenConnection(conStr,conn); dbCommand dbCmd; //配置SQL 语句 string sql = "INSERT INTO pump_station (id,name,addr) VALUES (?,?,?)"; rc = dbStartCommand(conn, sql, dbCmd); //替换SQL 中的? rc = dbSetParameter(dbCmd, 1, DB_PARAM_IN, 1535); rc = dbSetParameter(dbCmd, 2, DB_PARAM_IN, "rockwell"); rc = dbSetParameter(dbCmd, 3, DB_PARAM_IN, "shanghai"); //执行命令 rc = dbExecuteCommand(dbCmd); //关闭数据库 dbCloseConnection(conn); }
执行 看数据库结果
OK 操作成功!
后记
结合上一节的定时器 大家可以做些好玩的东西出来