感谢任何可以提供帮助的人...
背景:
我有一个应用程序在 Borland Delphi v6 中编码并且仍然受支持。最近,我遇到了 TADStoredProc 类无法执行存储过程的问题。这段代码之前已经稳定了好几年,从未被修改过。
我可以在请求上配置超时,这是受尊重的,但是存储过程调用永远不会运行,即使超时时间很长。应用程序只是挂起,或因超时异常而退出。(我知道服务器没有负担过重,并响应同一客户端发起的其他 SQL SELECT 请求。)
我知道D6很旧。我确实有一个使用 Embarcadero RAD Studio XE2 的单独环境,在那里我设法构建了相同的项目,但仍然存在相同的问题。... 只想确认一下。
去哪儿?
- 请查看提供的代码,看看是否有更好的方法来做事。(也许 MSSQL 界面更挑剔,最近更新后?)我当然欢迎推荐。
- 是否有另一种方法可以插入应用程序,可靠且不需要 TADStoredProc?我已经完成了挖掘,但没有找到任何好的例子。
代码示例
function TImport.OpenHeader(DriverID: Integer, …, ScanStart: DateTime, ...): integer;
var
suid: integer;
jid: integer;
con : TADOConnection;
sp : TADOStoredProc;
begin
suid := getScanUnitID();
jid := deriveJobID(ScanStart);
con := TADOConnection.Create(nil);
con.LoginPrompt := false;
con.ConnectionString := 'Provider=SQLOLEDB.1;Password=<testPwd>;Persist Security Info=True;User ID=<testUser>;Initial Catalog=<myDB>;Data Source=<myServer>';
con.CommandTimeout := 10;
con.KeepConnection := true;
con.Connected := true;
sp := TADOStoredProc.Create(nil);
sp.Connection := con;
sp.CommandTimeout := 10;
sp.ProcedureName := 'mon4_OpenHeader;1';
sp.Parameters.Refresh;
sp.Parameters.ParamByName('@ScanUnitID').Value := suid;
sp.Parameters.ParamByName('@JobID').Value := jid;
sp.Parameters.ParamByName('@DriverID').Value := DriverID;
//[…]
sp.Parameters.ParamByName('@Result').Direction := pdOutput; //returned from stored proc
sp.ExecProc;
Result := sp.Parameters.ParamByName('@Result').Value;
sp.Free;
con.Free;
end; // end OpenHeader(DriverID: Integer, …, ScanStart: DateTime, …): integer
感谢您的任何帮助,您可以提供。