Что нового

Подключение к MSSQL и запуск процедуры

classick

Новичок
Сообщения
16
Репутация
1
Всем добрый день.

Возникла задача в ходе которой мне необходимо получить данные с MSSQL сервера (2005) путем выполнения определенной процедуры.
Меня интересует вопрос о том, как правильно подключиться к MSSQL.
Нашел вот такой пример
Код:
#include "_SQL.au3"

;Configure the database server IP and login credentials
Local $ServerAddress = "172.21.7.190:1433"
Local $ServerUserName = "pstat"
Local $ServerPassword = "P@ssw0rd"
Local $DatabaseName = "DWH_CMS"

;Next, start the SQL service
_SQL_RegisterErrorHandler();register the error handler to prevent hard crash on COM error
$OADODB = _SQL_Startup()
If $OADODB = $SQL_ERROR Then MsgBox(0 + 16 + 262144, "Error", _SQL_GetErrMsg())
If _sql_Connect(-1, $ServerAddress, $DatabaseName, $ServerUserName, $ServerPassword) = $SQL_ERROR Then
MsgBox(0 + 16 + 262144, "Error 1", _SQL_GetErrMsg())
_SQL_Close()
Exit
EndIf

;Then you should be all set. To query the database, something like this:
Local $fullSQL
If _Sql_GetTableAsString(-1, "SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON SET ANSI_WARNINGS ON DECLARE @logid varchar(5) SET @logid = "87777" EXECUTE [dbo].[OPENQUERY_CMS_hagent] @logid", $fullSQL) = $SQL_OK Then
Else
MsgBox(0 + 16 + 262144, "SQL Error", _SQL_GetErrMsg())
EndIf
Изменил его под себя, добавил выполнение процедуры, прописал коннект к базе, но при запуске получаю следующую ошибку:
Код:
>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "E:\Projects\CMS_Statistic\MSSQL\connect.au3"    
###############################
err.description is: 	[Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection.
err.windescription:	Exception occurred.

err.number is: 	80020009
err.lastdllerror is: 	0
err.scriptline is: 	220
err.source is: 	Microsoft OLE DB Provider for ODBC Drivers
err.helpfile is: 	
err.helpcontext is: 	0###############################
###############################
err.description is: 	Operation is not allowed when the object is closed.
err.windescription:	Exception occurred.

err.number is: 	80020009
err.lastdllerror is: 	0
err.scriptline is: 	373
err.source is: 	ADODB.Connection
err.helpfile is: 	C:\Windows\HELP\ADO270.CHM
err.helpcontext is: 	1240653###############################
>Exit code: 0    Time: 27.17

Возможно кто-то сможет мне подсказать где я допустил ошибку в скрипте?

Спасибо.

________________________________

Вопрос решился удалением порта из адреса сервера
 

ChAV

Новичок
Сообщения
12
Репутация
0
Ребят, помогите и мне тоже, поэтому темку поднять немного хочу
Вообщем не понимаю почему при указании Data Source=PCS7_PC\WINCC в строке подключения, выходят ошибки.
Код:
#include <MSSQL.au3>
#include <Array.au3>

$sqlCon = ObjCreate("ADODB.Connection")  
$sqlCon.Open("Provider=SQLOLEDB.1;Data Source=PCS7_PC\WINCC;Initial Catalog=master;Connect Timeout=150;Network Library=dbmssocn; User ID=sa; Password=1234567;")  
msgbox(4096,"",$sqlCon)

Например на похожей строке подключения, написанной на делфи нет такой проблемы
На скринах програмка, которая цепляется к базе без проблем с точной строкой подключения и моя строка в autoit
А так же окно коннекта в MSSQL2005

Подскажите как написать строку, что бы зацепится к БД

Спасибо
 

Вложения

  • untitled.PNG
    untitled.PNG
    31.9 КБ · Просмотры: 35
  • untitled1.PNG
    untitled1.PNG
    65.2 КБ · Просмотры: 27

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Объект создается?
Код:
$sqlCon = ObjCreate("ADODB.Connection")
MsgBox(0, @error, ObjName($sqlCon))


Я помню к MSSQL цеплялся так DRIVER={SQL Server};SERVER=localhost;DATABASE=uptimedb;UID=;PWD=;
 

ChAV

Новичок
Сообщения
12
Репутация
0
Вроде создается....@error возвращает 0
ObjName($sqlCon) возвращает _Connection



Добавлено:
Сообщение автоматически объединено:

inververs сказал(а):
Я помню к MSSQL цеплялся так DRIVER={SQL Server};SERVER=localhost;DATABASE=uptimedb;UID=;PWD=;

Вот вся проблема похоже что ему не нравится запись такая через \. Если отдельно написать PCS7_PC скрипт уходит в жесткий затуп....
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
$sqlCon = ObjCreate("ADODB.Connection")  
$sqlCon.Open("Provider=SQLOLEDB.1;Data Source=PCS7_PC\WINCC;Initial Catalog=master;Connect Timeout=150;Network Library=dbmssocn; User ID=sa; Password=1234567;")  
msgbox(4096,"",$sqlCon)
Func _ErrFunc($oError)
    ; Do anything here.
    ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
            @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
            @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
            @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
            @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
            @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
            @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
            @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
            @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
            @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc   ;==>_ErrFunc

посмотрите что пишет в консоль.
 

ChAV

Новичок
Сообщения
12
Репутация
0
Код:
#include <MSSQL.au3>
#include <Array.au3>
#include "_SQL.au3"

;$sqlCon = ObjCreate("ADODB.Connection")  
;$sqlCon.Open("Provider=SQLOLEDB.1;Data Source=PCS7_PC\WINCC;Initial Catalog=master;Connect Timeout=150;Network Library=dbmssocn; User ID=sa; Password=1234567;")  
;msgbox(4096,"",$sqlCon)
$sqlCon = ObjCreate("ADODB.Connection")
$sqlCon.Open("DRIVER={SQL Server};SERVER=PCS7_PC\WINCC;DATABASE=CC_OS_SERV_15_02_11_09_04_44;UID=sa;PWD=1234567")
MsgBox(0, @error, ObjName($sqlCon))


Так тоже пробую....то же самое


Добавлено:
Сообщение автоматически объединено:

inververs сказал(а):
посмотрите что пишет в консоль.

Код:
testmysql.au3 () : ==> COM Error intercepted !
	err.number is: 		0x00000000
	err.windescription:	
	err.description is: 	
	err.source is: 		
	err.helpfile is: 	
	err.helpcontext is: 	
	err.lastdllerror is: 	
	err.scriptline is: 	
	err.retcode is: 	0x00000000
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
ChAV
странно, обычно пишет вот такое: все поля заполнены:
Код:
AutoIt v3 Script.au3 (17) : ==> COM Error intercepted !
	err.number is: 		0x80020009
	err.windescription:	Ошибка.

	err.description is: 	[DBNETLIB][ConnectionOpen (Connect()).]Указанный SQL Server не найден.
	err.source is: 		Microsoft OLE DB Provider for SQL Server
	err.helpfile is: 	
	err.helpcontext is: 	0
	err.lastdllerror is: 	0
	err.scriptline is: 	17
	err.retcode is: 	0x80004005
У тебя какая версия autoit?
 

ChAV

Новичок
Сообщения
12
Репутация
0
inververs сказал(а):
ChAV
странно, обычно пишет вот такое: все поля заполнены:
Код:
AutoIt v3 Script.au3 (17) : ==> COM Error intercepted !
	err.number is: 		0x80020009
	err.windescription:	Ошибка.

	err.description is: 	[DBNETLIB][ConnectionOpen (Connect()).]Указанный SQL Server не найден.
	err.source is: 		Microsoft OLE DB Provider for SQL Server
	err.helpfile is: 	
	err.helpcontext is: 	0
	err.lastdllerror is: 	0
	err.scriptline is: 	17
	err.retcode is: 	0x80004005
У тебя какая версия autoit?
v3.3.6.1

Кстати создал на рабочем столе файл .udl
Там сделал коннект к базе, он мне выпихнул строку
Код:
[oledb]
; Everything after this line is an OLE DB initstring
Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=PCS7_PC\WINCC
родилась строка
Код:
$sqlCon = ObjCreate("ADODB.Connection")  
;$sqlCon.Open("Provider=SQLOLEDB.1;Data Source=PCS7_PC\WINCC;Initial Catalog=CC_OS_SERV_15_02_11_09_04_44;Connect Timeout=150;Network Library=dbmssocn; User ID=sa; Password=1234567;")  

$s=$sqlCon.Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=PCS7_PC\WINCC")  
msgbox(4096,"",$s)


MsgBox возвращает пустоту в сообщении....то есть есть коннект?

Дополняю...цепляется к MS SQL, вижу это в Activity Monitor сервера...теперь как сделать запросы к этой базе...ладно разбираемся дальше :smile:
 

ChAV

Новичок
Сообщения
12
Репутация
0
Вообщем, как я и говорил коннект кMS SQL проходит успешно. Это видно в Active monitor.

Я не могу понять почему запрос не работает.....
Код:
Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
#include <MSSQL.au3>
#include <_sql.au3>
#include <Array.au3>
#Include <SQLite.au3> 
#Include <SQLite.dll.au3>
Dim $result 

$sqlCon = ObjCreate("ADODB.Connection")  
;$sqlrs = ObjCreate("ADODB.Recordset")

$s=$sqlCon.Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=PCS7_PC\WINCC")  
;Sleep(10000)
$myQuery=_MSSQL_Query($sqlCon,"SELECT top 1 name FROM sysdatabases WHERE name LIKE 'CC_%R'")
;$result=_MSSQL_GetRecord($s,"SELECT top 1 name FROM sysdatabases WHERE name LIKE 'CC_%R'")
;_arrayDisplay($result)
$result=$sqlCon.Execute("SELECT top 1 name FROM sysdatabases WHERE name LIKE 'CC_%R'")

;$sqlCon.Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog="";Data Source=PCS7_PC\WINCC")
msgbox(4096,"",$myQuery)

msgbox(4096,"",$result)

;Sleep(10000)
$sqlCon.Close


Что в $myQuery, что $result - пустышки.....

хотя из самого сервера делаешь....то нормально все работает и возвращает CC_OS_SERV_15_02_11_09_04_44R
ниже скрин

Посоветуйте чего нить....
 

Вложения

  • untitled2.PNG
    untitled2.PNG
    104.4 КБ · Просмотры: 35
Верх