Я делаю много звонков в таблицы базы данных через ADO. В духе хранения вещей DRY я написал следующие функции, чтобы вернуть массив значений из набора записей. Является ли этот заяц мозгом? Я использую его в основном для захвата набора значений combo-box и тому подобного, никогда не для огромных значений. Пример использования (обработка ошибок удалена для краткости):критика кода - я создаю машину Rube Goldberg?
Function getEmployeeList()
getEmployeeList= Array()
strSQL = "SELECT emp_id, emp_name from employees"
getEmployeeList = getSQLArray(strSQL, "|")
End Function
Тогда я просто делаю все, что захочу, с возвращаемым массивом.
Function getSQLArray(SQL, delimiter)
'*************************************************************************************
' Input a SQL statement and an optional delimiter, and this function
' will return an array of strings delimited by whatever (pipe defaults)
' You can perform a Split to extract the appropriate values.
' Additionally, this function will return error messages as well; check for
' a return of error & delimiter & errNum & delimiter & errDescription
'*************************************************************************************
getSQLArray = Array()
Err.Number = 0
Set objCon = Server.CreateObject("ADODB.Connection")
objCon.Open oracleDSN
Set objRS = objCon.Execute(SQL)
if objRS.BOF = false and objRS.EOF = false then
Do While Not objRS.EOF
for fieldIndex=0 to (objRS.Fields.Count - 1)
If (fieldIndex <> 0) Then
fieldValue = testEmpty(objRS.Fields.Item(fieldIndex))
recordString = recordString & delimiter & fieldValue
Else
recordString = CStr(objRS.Fields.Item(fieldIndex))
End If
Next
Call myPush(recordString, getSQLArray)
objRS.MoveNext
Loop
End If
Set objRS = Nothing
objCon.Close
Set objCon = Nothing
End Function
Sub myPush(newElement, inputArray)
Dim i
i = UBound(inputArray) + 1
ReDim Preserve inputArray(i)
inputArray(i) = newElement
End Sub
Function testEmpty(inputValue)
If (trim(inputValue) = "") OR (IsNull(inputValue)) Then
testEmpty = ""
Else
testEmpty = inputValue
End If
End Function
Вопросы, которые я бы являются: смысл абстрагироваться все творение записей объекта/открытия/обработки ошибок в свой собственный вызов функции, как это? Я строю машину Рубе Голдберга, где кто-нибудь, поддерживающий этот код, проклинает мое имя?
Должен ли я просто сосать его и написать некоторые макросы, чтобы выплюнуть код соединения ADO, а не попробовать сделать это в функции?
Я очень новичок в asp, поэтому у меня есть дыры в его возможностях/лучших практиках, поэтому любой ввод будет оценен.
Не знал метода GetRows. , , Благодарю. – GoingTharn