Универсальная функция VBscript для подключения к любой базе данных и выполнения любого запроса SQL - PullRequest
0 голосов
/ 08 декабря 2011

функция должна просто принимать строку подключения и запрос SQL в качестве входных данных и должна подключаться к любой базе данных (SQL, ORACLE, SYBASE, MS ACCESS) и выполнять любой запрос, который я передал в качестве параметров функции.

Я написал нижеприведенную функцию для этой задачи. Можете ли вы проверить это один раз и сказать мне, что это правильно, или, пожалуйста, скажите мне, если я где-то не так.

#
Public Function ConnectDB (strCon, strQuery)
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
objConnection.Open strCon

objRecordSet.Open strQuery,objConnection 
objRecordSet.MoveFirst
Do Until objRecordset.EOF
Msgbox "Number of records: " & objRecordset.RecordCount 
Msgbox objRecordset(0)
Msgbox objRecordset(1)
    objRecordset.MoveNext
Loop
objRecordSet.Close
objConnection.Close
Set objConnection = Nothing
Set objRecordSet = Nothing
End Function
#
Call ConnectDB ("Provider = Microsoft.Jet.OLEDB.4.0; " & _ 
            "Data Source = inventory.mdb","SELECT * FROM EMP ORDER BY EMPName")

ОБНОВЛЕНИЕ:
Большое спасибо за ответы.

На самом деле меня попросили написать функцию, которая выполняет задачу подключения к любой базе данных и выполнения любого запроса (заданного пользователем) в этой подключенной базе данных.

Я начал изучать VBScript и хочу иметь глубокие знания о написании функций.Эккехард Хорнер, скажите, пожалуйста, где я могу прочитать, чтобы узнать все о процедурах (функциях и подпроцедурах)?В настоящее время у меня есть только основная идея о подпрограммах, и я сослался на MSDN, где они дали только основную информацию.Пожалуйста, помогите мне, где узнать больше о рутинах.Очень трудно писать программы, не зная о них правильно.

Привет, Санпако, ниже приведен класс, который я написал.Пожалуйста, проверьте его один раз и дайте мне знать исправления.Я очень новичок в VBScript. Предложите мне способы улучшить свои знания в области программирования.

Class DBCommunicator
Public Function DBConnect(StrCon)
Option Eplicit
Dim oConn
set oConn = CreateObject("ADODB.Connection")
oConn.Open Strcon
Function DBConnect = True
End Function

Public Function QueryDB(StrQuery)
Option Eplicit
Dim oRst, oField
set oRst = CreateObject("ADODB.recordset")
oRst.Open "StrQuery", oConn
Do Until oRst.EOF   
For each oField in oRst.Fields        
Print oField.Name & " = " & oField.Value    
Next
oRst.MoveNext
loop

Public Function DBdisConnect
oRst.close
oConn.close
End Function
End Class

########################################

Option Explicit
Dim strResult
strResult=DBCommunicator.DBConnect("<<Connection String of any database User want to connect>>")
    If strResult<>True Then
        wscript.echo "DB Connection Failed"

    End If
DBCommunicator.QueryDB("Select * from EMP")
DBCommunicator.DBdisConnect

Ответы [ 3 ]

1 голос
/ 08 декабря 2011

Подпрограмма (Sub или Function) должна выполнять ровно одну повторяемую / повторно используемую задачу.Ваша функция создает, открывает и закрывает соединение, создает, использует и закрывает набор записей и раздражает пользователя сообщениями.Если вы хотите сделать что-то разумное завтра, вам придется написать (скопировать, вставить и изменить) другую подпрограмму.

Функция должна возвращать значение;твой нет.Функция не должна иметь побочных эффектов;ваш делает, выполняя IO.Работа / действия рутины должны определяться только ее параметрами;ваш зависит от настроек / значений по умолчанию для многочисленных параметров. Не открывайте методы, которые вы не предоставите.

Код не должен содержать жир;.MoveFirst перед циклом .EOF, отображающий .RecordCount в цикле и устанавливающий переменные объекта равными Nothing непосредственно перед завершением процедуры - это просто так.Код VBScript должен начинаться с «Option Explicit»;ваш, очевидно, не делает.

Хотя независимость конкретной СУБД привлекательна, когда вы изучаете или исследуете, профессиональное решение проблемы реального мира должно основываться на решении о «лучшей» СУБД для этой задачи.;это приведет к конкретному коду СУБД с использованием специфических функций СУБД.Тогда переход от одной СУБД к другой путем изменения только ConnectionString является иллюзорным.

Работа с базами данных выполняется в стиле ADO «.Net-one one-connect» .NET или в стиле «connect on start - do много-много-отключение при завершении» в «classic» ADO.Если вы укажете, какие задачи вы имеете в виду, я могу захотеть добавить к этому ответу.

0 голосов
/ 19 февраля 2019

Я исправил твой код, не уверен, что согласен с ним, но, похоже, он работает. Я не думаю, что VB Script распознает классы.

Option Explicit

'/5341309/universalnaya-funktsiya-vbscript-dlya-podklycheniya-k-lyboi-baze-dannyh-i-vypolneniya-lybogo-zaprosa-sql
'https://www.connectionstrings.com/microsoft-sql-server-odbc-driver/

Dim oConn, oRst

Public Function DBConnect(StrCon)
    set oConn = CreateObject("ADODB.Connection")
    oConn.Open Strcon
    DBConnect = True
End Function

Public Function DBQuery(StrQuery)
    Dim oField
    set oRst = CreateObject("ADODB.recordset")
    oRst.Open StrQuery, oConn
    Do Until oRst.EOF   
      For each oField in oRst.Fields        
        wscript.echo oField.Name & " = " & oField.Value    
      Next
      oRst.MoveNext
    Loop
End Function

Public Function DBdisConnect
    oRst.close
    oConn.close
End Function


Dim strResult

strResult=DBConnect("<<Connection String of any database User want to connect>>")

If strResult<>True Then
    wscript.echo "DB Connection Failed"
End If

DBQuery("Select * from EMP")

DBdisConnect
0 голосов
/ 09 декабря 2011

Вы можете рассмотреть возможность создания класса DatabaseCommunicator, который выполняет отдельные функции базы данных (Connect, ExecuteQuery, Disconnect), вместо того, чтобы пытаться делать все одним методом. Кроме того, если вы хотите динамически использовать различные типы поставщиков, вам потребуется проверить формат запроса, чтобы убедиться, что он использует правильный синтаксис для любого поставщика, который вы используете.

Мне было бы очень интересно посмотреть, как вы справитесь с этой задачей, если вы ее возьмете.

...