当前位置: 首页 > news >正文

在Wincc中使用Dapper读写数据库

在Wincc中使用Dapper读写数据库

Dapper是C#下的Micro ORM,极大简化了ADO.NET的查询操作。本应用将Dapper封装为一个COM组件,以便在Wincc中使用Dapper查询数据库。

安装

下载dll文件。
解压压缩包,运行“注册DLL.vbs”文件,提示“成功注册了类型”,即注册成功。

需要安装.NET Framework 4.8。

简单示例

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper")       
Dim endTime
endTime = SqlClient.ExecuteScalar("SELECT Max([TimeStampe]) from UA#Batch where [BatchName] = 'abcd'")

以上代码将自动连接到Wincc服务器的Wincc运行数据库,从UA#Batch​用户归档中查询结束时间并返回时间值。

执行SQL

ExecuteScalar

查询单个值。

原型:

object ExecuteScalar(string sql, object param = null, object transaction = null, int? commandTimeout = null)

示例:查询指定批次的结束时间

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper")       
Dim endTime
endTime = SqlClient.ExecuteScalar("SELECT Max([TimeStampe]) from UA#Batch where [BatchName] = 'abcd'")

Execute

执行SQL并返回受影响的行数。

原型:

int Execute(string sql, object param = null, object transaction = null, int? commandTimeout = null)

示例:删除数据

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper")       
SqlClient.Execute("DELETE from UA#Batch where [BatchName] = 'abcd'")

Query

查询数据。

原型:

ArrayList Query(string sql, object param = null, object transaction = null, int? commandTimeout = null)

返回一个ArrayList​类型对象,其中的元素是HashTable​类型对象。

示例:查询批次

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper")  
Dim results     
set results = SqlClient.Query("Select * from UA#Batch where [BatchName] = 'abcd'")
Dim r
For Each r in results
	HMIRuntime.trace r("BatchName") & vbnewline
	HMIRuntime.trace r("TimeStamp") & vbnewline
next 

QueryFirst

获取第一个结果。如果查询结果为空则会引发异常。

原型:

Hashtable QueryFirst(string sql, object param = null, object transaction = null, int? commandTimeout = null)

返回一个HashTable​类型对象。

示例:

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper")  
Dim result     
set result = SqlClient.QueryFirst("Select * from UA#Batch where [BatchName] = 'abcd'")

HMIRuntime.trace result ("BatchName") & vbnewline
HMIRuntime.trace result ("TimeStamp") & vbnewline

QueryFirstOrDefault

获取第一个结果,如果数据为空则返回一个默认值。

原型:

Hashtable QueryFirstOrDefault(string sql, object param = null, object transaction = null, int? commandTimeout = null)

示例:

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper")  
Dim result     
set result = SqlClient.QueryFirstOrDefault("Select * from UA#Batch where [BatchName] = 'abcd'")
if not result is nothing then
	HMIRuntime.trace result ("BatchName") & vbnewline
	HMIRuntime.trace result ("TimeStamp") & vbnewline
end if 

QuerySingle

获取第一个结果,如果查询为空或不止一行则抛出异常。

原型:

Hashtable QuerySingle(string sql, object param = null, object transaction = null, int? commandTimeout = null)

示例:

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper")  
Dim result     
set result = SqlClient.QuerySingle("Select * from UA#Batch where [BatchName] = 'abcd'")

HMIRuntime.trace result ("BatchName") & vbnewline
HMIRuntime.trace result ("TimeStamp") & vbnewline

QuerySingleOrDefault

获取第一个结果,如果数据为空则返回一个默认值,如果查询出不止一行则抛出异常。

原型:

Hashtable QuerySingleOrDefault(string sql, object param = null, object transaction = null, int? commandTimeout = null)

示例:

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper")  
Dim result     
set result = SqlClient.QuerySingleOrDefault("Select * from UA#Batch where [BatchName] = 'abcd'")
if not result is nothing then
	HMIRuntime.trace result ("BatchName") & vbnewline
	HMIRuntime.trace result ("TimeStamp") & vbnewline
end if 

事务

原型:

TransactionWrapper BeginTransaction(IsolationLevel isolationLevel = IsolationLevel.Unspecified)

示例:

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper") 
Dim transaction
set transaction = SqlClient.BeginTransaction()
SqlClient.Execute("DELETE from UA#Batch where [BatchName] = 'abcd'", nothing, transaction)
transaction.Commit() ' 提交
'transaction.Rollback() '滚回
transaction.Dispose() '释放事务对象

在代码最后,需要用Dispose()​释放事务对象,否则要等待垃圾回收时才会释放事务对象,这将导致其他查询等待事务结束。

参数

方法的第二个参数是传入到SQL的参数,此功能尚未开发,仅作预留。

指定访问的数据库

默认访问Wincc 运行数据库,如果要访问其他数据库,使用以下代码:

访问Wincc运行数据库:

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper")
sqlClient.UseWinccRtDatabase()

访问Wincc组态数据库:

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper")
sqlClient.UseWinccRcDatabase()

访问指定的数据库:

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper")
sqlClient.UseDatabase("AuditDB")

连接其他数据源

默认连接到Wincc服务器数据库,如果要连接到其他数据源,则给UseDatabase​属性赋值。

Dim sqlClient 
Set sqlClient = CreateObject("Wincc.SqlClientHelper")
sqlClient.ConnectionString = "Provider=MSOLEDBSQL.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=abcd"

连接到其他数据源时,不能使用UseWinccRtDatabase()​或UseWinccRcDatabase()​方法设置默认数据库,这两个方法获取本地Wincc的数据库。而要用UseDatabase()​指定默认数据库。

http://www.dtcms.com/a/99907.html

相关文章:

  • Go/Python(Nuitka)/Rust/Zig 技术对比
  • 记一次关于云的渗透过程
  • Git配置
  • C# 的Lambda表达式‌常见用法和示例
  • C++中常见符合RAII思想的设计有哪些
  • c++使用iconv进行字符编码格式转换
  • 小红书多账号运营:如何实现每个账号独立 IP发布文章
  • ubuntu 安装 postgresql
  • Dubbo(23)如何配置Dubbo的服务消费者?
  • 蓝桥杯_DS18B20温度传感器
  • 【Java】Java核心知识点与相应面试技巧(六)——类与对象(一)
  • 什么是CMS?常用CMS有哪些?
  • Oracle数据库数据编程SQL<2.3 DML增、删、改及merge into>
  • 【学Rust写CAD】15 定点数实现(fixed.rs)
  • CSS中的em,rem,vm,vh详解
  • PipeWire 音频设计与实现分析一——介绍
  • C# 字符串(String)
  • 前端路由守卫与后端权限验证,仅使用路由守卫是否安全?
  • docker日志大小和保存管理
  • 常用的排序算法
  • 浅析Android Jetpack ACC之ViewModel
  • vector之内存分配详解
  • 23 种设计模式中的迭代器模式
  • Three.js 快速入门教程【十九】CSS2DRenderer(CSS2D渲染器)介绍,实现场景中物体或设备标注标签信息
  • QML中刷新图片的三种方法对比分析
  • [ComfyUI] 如何升级自定义节点(Custom Nodes)
  • 计算机网络和因特网
  • AGI 的概念、意义与未来展望
  • 【AI论文】挑战推理的边界:大型语言模型的数学基准测试
  • Keepass恢复明文主密码漏洞(CVE-2023-3278)复现与hashcat爆破学习