TADOCommand执行存储过程中参数匹配问题(100分)

  • 主题发起人 主题发起人 BrettDai
  • 开始时间 开始时间
B

BrettDai

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟在开发一个数据库系统.环境:D7+MS SQL SERVER 2005<br>后台有一个存储过程(简化如下):<br>spU_modSACreateScenario(<br>&nbsp; &nbsp; @prmNewSceCode &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Varchar(12), &nbsp;<br>&nbsp; &nbsp; @prmDebug &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Varchar(1) = 'N', <br>&nbsp; &nbsp; @prmCopyDisabledComponent Varchar(1) = 'N'<br>)<br>其中后两个参数是可选的(有缺省值)<br>由于该过程不需要返回结果集,所以前端用一个TADOCommand组件连接该存储过程.<br>在传递参数时用SqlServer Profiler Trace发现参数的值没有和对应的参数名称对应起来,传递方法如下:<br>Function CreateScenario(........)<br>begin<br>&nbsp; &nbsp; with TADOCommand1 do<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; Parameters.ParamByName('@prmNewSceCode').value := SceCode;<br>&nbsp; &nbsp; &nbsp; &nbsp; Parameters.ParamByName('@prmDebug').value := 'Y';<br>&nbsp; &nbsp; &nbsp; &nbsp; Parameters.ParamByName('@prmCopyDisabledComponent').value := 'N';<br>&nbsp; &nbsp; &nbsp; &nbsp; ExecuteOptions := [eoExecuteNoRecords];<br>&nbsp; &nbsp; &nbsp; &nbsp; Execute;<br>&nbsp; &nbsp; 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控件.
 
你在DELPHI里试一试,不要静态指定存储过程的名称,采用动态赋值试一下。
 
这个问题受你提示解决了。<br>静态指定SP没有任何问题,只要增加<br>TADOCommand1.Parameters.Refresh调用就可以了(不应该忘记的)<br>这个系统使用了上千个存储过程,改动态可不是闹着玩的,呵呵<br>多谢帮助!
 
后退
顶部