由於任何能提供一些幫助...最近的失敗德爾福TADOStoredProc/D6和RAD Studio的XE2
背景:
我有一個應用程序編碼和Borland的Delphi V6仍支持。最近我遇到了TADOStoredProc類未能執行存儲過程的問題。此代碼以前已穩定多年,並且從未進行過修改。
我可以配置請求的超時值,但是存儲過程調用永遠不會運行,即使在非常長的超時時間內也是如此。該應用程序只是掛起,或保留超時異常。 (我知道服務器沒有負擔過重,並且響應同一客戶端發起的其他SQL SELECT請求。)
我知道D6是舊的。我確實與Embarcadero RAD Studio XE2有一個單獨的環境,在那裏我設法建立了同樣的項目,並且仍然存在相同的問題。 ... 只想確認一下。
去哪裏?
- 請檢查提供的代碼,看看是否有更好的方法來做事。 (也許MSSQL界面在最近更新之後更挑剔?)我當然歡迎推薦。
- 有沒有其他方法可以插入應用程序,這是可靠的,不需要TADOStoredProc?我已經完成了我的挖掘工作,但沒有遇到任何好的例子。
代碼示例
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
感謝您的幫助,您可以提供。
你有什麼錯誤嗎?你有沒有試過Profiler來知道程序是否被執行?你有沒有試過從ssms執行程序? –
謝謝你的建議。奇怪的是,SQL Profiler似乎在這次「工作」的時候動搖了。引發的Delphi ADO運行時異常是「超時」。從SSMS運行沒有問題。 – user1631866
謝謝你的建議。 |奇怪的是,SQL Profiler似乎在這次「工作」的時候動搖了。拋出的Delphi ADO運行時異常是很長的「超時」。從SSMS運行沒有問題。 |奇怪的是,通過TADOQuery運行的動態SQL在所有實例中都可以,除非我爲存儲過程調用運行「EXEC ...」。 |服務器上有什麼「關閉」的東西? – user1631866