练习要点:
1、创建新库,利用类的继承,保留原库功能和智能提示
2、利用新库给原库扩展新功能
库文件:
~\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自动刷新。