在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()​指定默认数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值