MySql存储过程脚本中含有预处理语句时,不能执行脚本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MySql存储过程脚本中含有预处理语句时,不能执行脚本
## 不含预处理的存储过程
## 存储过程CustomCount.sql : 取各个表的记录数
Drop Procedure If Exists CustomCount;
Create Procedure CustomCount
(
outRowNumbigint
)
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
(
TableNamevarchar(100)
, out RowNumbigint
)
Not Deterministic
SQL Security Definer
Comment ''
Begin
Declare SQLStrvarchar(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安装。