Если база данных не Oracle, то это MS SQl 2008.
Моя задача: если Oracle, добавьте еще два параметра при вызове хранимого процесса.
Сгенерированы хранимые процедуры Oracle и MSFT; У Oracle есть 3 дополнительных параметра:
Vret_val out number,
Vparam2 in out number,
Vparam3 in out number,
... the rest
(На самом деле они не называются Vparam2 и Vparam3, но это не должно иметь значения).
Итак, код для вспомогательного класса VB.Net, который вызывает хранимый процесс:
Imports System.Data.Odbc
Imports System.Configuration
Dim objCon As OdbcConnection = Nothing
Dim objAdapter As OdbcDataAdapter
Dim cmdCommand As New OdbcCommand
Dim objDataTable As DataTable
Dim sconnection As String
Try
sconnection = mConnectionString
objAdapter = New OdbcDataAdapter
objCon = New OdbcConnection(sconnection)
objCon.Open()
objAdapter.SelectCommand = cmdCommand
objAdapter.SelectCommand.Connection = objCon
objAdapter.SelectCommand.CommandType = CommandType.StoredProcedure
objAdapter.SelectCommand.CommandTimeout = Globals.mReportTimeOut
If Not mIsOracle Then
objAdapter.SelectCommand.CommandText = String.Format("{{call {0}}}", spName)
Else
Dim returnValue As New OdbcParameter
returnValue.Direction = ParameterDirection.Output
returnValue.ParameterName = "@Vret_val"
returnValue.OdbcType = OdbcType.Numeric
objAdapter.SelectCommand.Parameters.Add(returnValue)
objAdapter.SelectCommand.CommandText = String.Format("{{call {0}(?)}}", spName)
End If
Try
objDataTable = New DataTable(spName)
objAdapter.Fill(objDataTable)
Catch ex As Exception
...
Вопрос: Я озадачен тем, что делает String.Format("{{call {0}(?)}}", spName)
, в частности, часть (?)
. Насколько я понимаю, String.Format просто заменяет {0} на spName. {{
, }}
и (?)
действительно отбрасывают меня, потому что {
напоминает мне о форматировании, (?)
намекает на некоторое расширенное использование регулярных выражений.
К сожалению, мне не помогает ключевой человек, который находится в отпуске без привязи [умного] телефона.
Я предполагаю, что я просто добавляю еще 5 строк для каждого дополнительного параметра и меняю String.Format("{{call {0}(?)}}", spName)
на String.Format("{{call {0}(?,?,?)}}", spName)
. Я забыл упомянуть, что я кодирую это «вслепую» - у меня есть компилятор, чтобы помочь мне, но среда для этого не настроена.
Это закончится через несколько дней, но мне нужно сделать все возможное, чтобы попытаться закончить его вовремя:)
Спасибо.