这些天在用luasql, 发现如果要使用存储过程只能是 conn::execute("exec sp_name")变通来用,不支
持带参数的存储过程。我把它改造了一下, 让它基本可以执行带输入、输出参数和返回值的存储过程,并
加了一个是否启用连接池的功能。
像这样的存储过程:
create procedure sp_odbc_test
@input varchar(100),
@output int output
as
set @output = datalength(@input)
return @output
我的luasql.odbc库可以这样来调用了:
-- true表示启用连接池
env = assert(luasql.odbc(true), "建立失败");
conn = assert(env:connect("dsn", "username", "password"), "登录失败!")
-- prepare的参数为语句字符串和参数个数
st = conn:prepare("{ ? = call sp_odbc_test(?, ?) }", 3)
st:registerout(1, sqltypes.int)
st:setstring(2, "hello world!")
st:registerout(3, sqltypes.int)
st:execute()
local value = st:getint(1)
print(value)
st:close()
conn:close()
env:close()
最后三句可以不写,因为定义了垃圾回收。由于刚接触odbc,尚不是很清楚它的sql type和c type的匹配,
所以功能还不是很完善。如果你熟悉odbc的话,请与回复你的联系方式,我准备最终将其开源出去.