Bharat Leel Ответов: 2

Создайте SQL-соединение с помощью скрипта установки в проекте installshield


В проекте установки InstallShiled у нас есть определенное требование, что нам нужно проверить, существует ли какая-либо конкретная база данных или нет на данном SQL-сервере.

Для этого мы используем приведенный ниже сценарий установки:

szADOConnObjID = "ADODB.Connection";
set pADOConnObj = CreateObject(szADOConnObjID); 

szConnString = "driver={SQL Server};"; // For TLS 1.2 Only use driver={SQL Server Native Client 11.0};
szConnString = szConnString + "server=SQLServerName;";
szConnString = szConnString + "Initial Catalog=master;";
szConnString = szConnString + "Integrated Security=True";
MessageBox("SQL Connection String: " + szConnString, INFORMATION);
	
try
	MessageBox("Trying with Windows Authentication first", INFORMATION);
	if (pADOConnObj.State==0)then 
		pADOConnObj.Open(szConnString);
		MessageBox("Connection Success", INFORMATION);
	endif;	
catch
	MessageBox("Windows Authentication Catch",INFORMATION);
	MessageBox(Err.Description , SEVERE);
endcatch;


С приведенным выше скриптом установки он дает следующую ошибку:
---------------------------
Sample SQL Connect - InstallShield Wizard
---------------------------
Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.
---------------------------
OK   
---------------------------


Есть идеи, что я здесь делаю не так?

Что я уже пробовал:

szADOConnObjID = "ADODB.Connection";
set pADOConnObj = CreateObject(szADOConnObjID); 

szConnString = "driver={SQL Server};"; // For TLS 1.2 Only use driver={SQL Server Native Client 11.0};
szConnString = szConnString + "server=SQLServerName;";
szConnString = szConnString + "Initial Catalog=master;";
szConnString = szConnString + "Integrated Security=True";
MessageBox("SQL Connection String: " + szConnString, INFORMATION);
	
try
	MessageBox("Trying with Windows Authentication first", INFORMATION);
	if (pADOConnObj.State==0)then 
		pADOConnObj.Open(szConnString);
		MessageBox("Connection Success", INFORMATION);
	endif;	
catch
	MessageBox("Windows Authentication Catch",INFORMATION);
	MessageBox(Err.Description , SEVERE);
endcatch;

2 Ответов

Рейтинг:
11

Bharat Leel

Покопавшись в деталях я нашел исправление для этого от здесь.

По протоколу TLS 1.2

szConnString = "Provider=SQLOLEDB;"
szConnString = szConnString + "data source=SQLServerName;"
szConnString = szConnString + "Initial Catalog=master;"
szConnString = szConnString + "Integrated Security=SSPI"


Для TLS 1.2
szConnString = "Provider=SQLNCLI11;"
szConnString = szConnString + "SERVER=SQLServerName;"
szConnString = szConnString + "database=master;"
szConnString = szConnString + "Trusted_Connection=Yes"
msgbox "SQL Connection String: " + szConnString, INFORMATION


Для TLS 1.2 это лучшее решение, потому что оно работает в обеих средах.


Рейтинг:
1

RickZeeland

Возможно, Вам не хватает "database=master;" и "Trusted_connection=Yes", см. пример здесь:
Установки пользовательского диалогового окна, пользовательские действия, и код[^]


Bharat Leel

Спасибо, он исправил мое решение в какой-то степени, копая больше, Наконец, я нашел решение, которое мне также нужно заменить драйвер на провайдера.