Aardio-Extend sqlServer, increase transaction processing function

Practice points:

1. Create a new library, use class inheritance, retain the original library functions and smart tips

2. Use the new library to extend new functions to the original library

Library file:

~\lib\sqlServerEx\_.aardio or ~\lib\sqlServerEx.aardio

Library code:

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**/

Call example:

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()
}

Precautions:

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自动刷新。

 

Guess you like

Origin blog.csdn.net/sdlgq/article/details/111960524