aardio - 扩展sqlServer,增加事务处理功能

12 篇文章 2 订阅

作者已完善该库,以下内容仅供参考。

练习要点:

1、创建新库,利用类的继承,保留原库功能和智能提示

2、利用新库给原库扩展新功能

3、依赖于 /lib/sqlServer.aardio

库文件:

~\lib\sqlServerEx\_.aardio    或   ~\lib\sqlServerEx.aardio

库代码:

import sqlServer

class sqlServerEx{
    
	ctor(...){
		var args={...}
		if(#args=5?type(args[1])=type.string?type(args[2])=type.number?type(args[3])=type.string?type(args[4])=type.string?type(args[5])=type.string){
			var tlink = {}
			tlink["Data Source"]	= args[1]++","++args[2];
			tlink["Database"]		= args[3];
			tlink["User ID"]		= args[4];
			tlink["Password"]		= args[5];
			this = ..sqlServer(tlink)
		}else {
			this = ..sqlServer(...)
		}
		if(!this) return 
	};
	
	beginTrans = function(){
		if(this.connection) return this.connection.BeginTrans();
	}
	
	rollbackTrans = function(){
		if(this.connection) this.connection.RollbackTrans();
	}
	
	commitTrans = function(){
		if(this.connection) this.connection.CommitTrans();
	}

}

/**intellisense()
sqlServerEx = sqlServer数据库扩展,可代替sqlServer使用\n\n1:增加事务处理功能\n2:增加一种连接方式
sqlServerEx( 连接参数表 ) = @sqlServerEx(__\n	["Data Source"]="127.0.0.1,7788";\n	["Database"]="数据库名";\n	["User ID"]="用户名";\n	["Password"]="密码";\n);
sqlServerEx( "数据库连接语句",其他格式化参数 ) = @sqlServerEx("Provider=SQLOLEDB.1;Data Source=.\SQLEXPRESS;Database=数据库名;User ID=登录名;Password=登录密码");
sqlServerEx( ip地址,端口,数据库名,用户名,密码 ) = @sqlServerEx("__",1433,"","admin","");
sqlServerEx() = !sqlServer.
!sqlServer.formatSqlParameters(sql,其他格式化参数) = 如果格式化参数为一个表,则替换所有命名参数,\n否则调用 string.format 函数格式化SQL
!sqlServer.beginTrans() = 开启事务
!sqlServer.rollbackTrans() = 回滚事务
!sqlServer.commitTrans() = 提交事务
end intellisense**/

调用示例:

import sqlServerEx

s = sqlServerEx( 
	["Data Source"] = "127.0.0.1,1433";
	["Database"] = "数据库名";
	["User ID"] = "用户名";
	["Password"] = "密码"; 
)

/*
    可简写为:  
    s = sqlServerEx("127.0.0.1",1433,"数据库名","用户名","密码");
*/

if(s.beginTrans()){
    if(!s.exec("insert into db(field) values(123)")) s.rollbackTrans();
    elseif(!s.exec("insert into db(field) values(456)")) s.rollbackTrans();
    elseif(!s.exec("insert into db(field) values(789)")) s.rollbackTrans();
    else s.commitTrans();
}

注意事项:

s = sqlServerEx( 
	["Data Source"] = "127.0.0.1,1433";
	["Database"] = "数据库名";
	["User ID"] = "用户名";
	["Password"] = "密码"; 
)

输入后,aardio不会自动更新智能提示。

======================================
原因:
1、aardio的智能提示自动更新功能,只有在某一行尾按下回车后,才自动分析该行的语法提示。
2、像针对上述这种格式(一句分为多行)的语句,分析如下:
          1、变量 s 的赋值语句 s = sqlServerEx 在第 1 行;
          2、而该语句结束符 ) 在第 6 行;
          3、如果你在 2~6 行的任意一行末尾按回车,都是分析不到变量 s 的。
          4、只有在第一行末尾,也就是 s = sqlServerEx( 后面按回车,才会分析到 s 的智能提示内容。
          5、而第一行末尾,却不是整条语句的结束位置。
          6、所以,这是很不合理的。

======================================
解决方法:
1、按 Ctrl+K 手动刷新。
2、在 s = sqlServerEx(  行尾按回车,IDE自动刷新。
3、使用  s = sqlServerEx("127.0.0.1",1433,"数据库名","用户名","密码");  在行尾按回车,IDE自动刷新。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢光庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值