B
BrettDai
Unregistered / Unconfirmed
GUEST, unregistred user!
小弟在开发一个数据库系统.环境7+MS SQL SERVER 2005<br>后台有一个存储过程(简化如下):<br>spU_modSACreateScenario(<br> @prmNewSceCode Varchar(12), <br> @prmDebug Varchar(1) = 'N', <br> @prmCopyDisabledComponent Varchar(1) = 'N'<br>)<br>其中后两个参数是可选的(有缺省值)<br>由于该过程不需要返回结果集,所以前端用一个TADOCommand组件连接该存储过程.<br>在传递参数时用SqlServer Profiler Trace发现参数的值没有和对应的参数名称对应起来,传递方法如下:<br>Function CreateScenario(........)<br>begin<br> with TADOCommand1 do<br> begin<br> Parameters.ParamByName('@prmNewSceCode').value := SceCode;<br> Parameters.ParamByName('@prmDebug').value := 'Y';<br> Parameters.ParamByName('@prmCopyDisabledComponent').value := 'N';<br> ExecuteOptions := [eoExecuteNoRecords];<br> Execute;<br> end;<br>end;<br>DELPHI执行时在用TRACE跟踪到的执行是<br>EXEC spU_modSACreateScenario 1;'DBTEST170','Y','N'<br>如果不小心改变了后台存储过程的参数顺序.例如交换下参数@prmDebug和 @prmCopyDisabledComponent的顺序,就造成@prmDebug = 'N',@prmCopyDisabledComponent='Y'的错误.<br>就我所知sqlserver 2005本身和.NET在执行存储过程时候都会把参数和值对应起来,这样就不存在参数顺序的改变造成的不匹配问题.<br>如何解决请高手指教.<br>前提:尽量使用TADOCOMMAND控件.