目的
有的時候我們需要 將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 操作成功!
后記
結合上一節的定時器 大家可以做些好玩的東西出來