bitscn.com
## 不含预处理的存储过程
## 存储过程 customcount.sql : 取各个表的记录数
drop procedure if exists customcount;
create procedure customcount
(
out rownum bigint
)
not deterministic
sql security definer
comment ''
begin
select count(*) into rownum from uc_members;
end;
------------------------------------------------------------------------
## 含预处理的存储过程
## 存储过程getcount.sql: 传入表名,取某个表的记录数 drop procedure if exists getcount;
create procedure getcount
(
tablename varchar(100)
, out rownum bigint
)
not deterministic
sql security definer
comment ''
begin
declare sqlstr varchar(2000) default '';
set sqlstr = concat('select count(*) into @mynum from ', tablename);
set @resultsql = sqlstr;
prepare presql from @resultsql;
execute presql;
deallocate prepare presql;
set rownum = @mynum;
end;
-------------------------------------------------------------------------
上述两个存储过程脚本,在c#中读取文件内容后,运行,含预处理的存储过程执行失败。是什么原因呢??
附件是 .net framework 4.0的winform运行脚本源码示例,含这两个存储过程。
请修改您的mysql连接字符串即可。
customcount.sql中的uc_members表名变可改成您的表名。
点此下载
备注:
1. 制作web安装包时,需要用程序运行mysql脚本,而这些脚本中,经常含有 预处理脚本。
2. 使用这个预处理脚本主要是为了 在动态执行sql 时取得输出参数的值(类似getcount.sql中取值)。
3. 不要建议说,使用mysql.exe这个命令一个一个的运行,或者说是调用其它 mysql的.dll或.exe这种方式,因为web安装时,经常是没有权限取得本地文件的执行权限的。
4. 主要是需要在虚拟主机下进行web安装。
谢谢。
bitscn.com