Ответ 1
Попробуйте использовать собственный клиент SQL Server Native Client 10.0
Provider=SQLNCLI10;Server=myServerAddress;Database=myDataBase;Uid=myUsername;
Pwd=myPassword;
Спасибо, кто может оказать некоторую помощь...
Фон:
У меня есть приложение, закодированное и поддерживаемое в Borland Delphi v6. Совсем недавно у меня были проблемы с классом TADOStoredProc, который не смог выполнить хранимую процедуру. Этот код ранее был стабильным в течение нескольких лет и никогда не был изменен.
Я могу настроить тайм-аут на запрос, который соблюдается, однако вызов хранимой процедуры никогда не запускается даже в очень длинном тайм-ауте. Приложение просто зависает или освобождается от поручений по исключению таймаута. (Я знаю, что сервер не перегружен и отвечает на другие запросы SQL SELECT, созданные одним и тем же клиентом.)
Я знаю, что D6 старый. У меня есть отдельная среда с Embarcadero RAD Studio XE2, где мне удалось создать один и тот же проект, и у меня все те же проблемы.... Чтобы убедиться.
Куда пойти?
Пример кода
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
Спасибо за любую помощь, которую вы можете предоставить.
Попробуйте использовать собственный клиент SQL Server Native Client 10.0
Provider=SQLNCLI10;Server=myServerAddress;Database=myDataBase;Uid=myUsername;
Pwd=myPassword;
Вы можете просто удалить этот .1
после SQLOLEDB
, потому что он должен указывать только номер версии для использования.
con.ConnectionString := 'Provider=SQLOLEDB;Password=<testPwd>;Persist Security Info=True;User ID=<testUser>;Initial Catalog=<myDB>;Data Source=<myServer>';
Вам следует рассмотреть возможность переключения на более новый драйвер SQLNCLI
.
Вы не указали версию сервера Windows, версию сервера SQL Server или версию клиентского окна, но:
SQLOLEDB
должен присутствовать также в новых системах для обратной совместимости; SQLNCLI
должен поставляться с SQL Server 2005;
SQLNCLI10
должен поставляться с SQL Server 2008;
SQLNCLI11
должен поставляться с SQL Server 2012 и 2014;
SQLNCLI13
должен поставляться с SQL Server 2016;
Обратите внимание на версию драйверов 32/64bit, потому что для работы с 32-битным SQL-сервером вам нужен 32-битный драйвер и наоборот.
Убедитесь, что на ваших клиентах установлен правильный драйвер.
Пакет возможностей Microsoft® SQL Server® 2016
Windows 8, 8.1, 10, Windows Server 2012, 2012 R2, 2016
https://www.microsoft.com/en-us/download/details.aspx?id=52676
Вы найдете как x86/x64 версии sqlncli.msi
Родной клиент Microsoft® SQL Server® 2012
Windows 7, 8, 8.1, 10, Windows Server 2008 R2, 2012, 2012 R2
https://www.microsoft.com/en-us/download/details.aspx?id=50402
Вы найдете как x86/x64 версии sqlncli.msi
Собственный клиент Microsoft® SQL Server® 2008 R2
Windows Vista, XP, 7, Windows Server 2003, 2008, 2008 R2
x86 Пакет: http://go.microsoft.com/fwlink/?LinkID=188400&clcid=0x409
x64 Пакет: http://go.microsoft.com/fwlink/?LinkID=188401&clcid=0x409
Обратите внимание на жизненный цикл OLEDB/ODBC, OLEDB был объявлен устаревшим, чтобы переключиться на новейшие драйверы ODBC, но в прошлом октябре он был обновлен undeprecated.