Si la base de données n'est pas Oracle, c'est MS SQl 2008. Ma tâche: si Oracle, ajoutez deux autres paramètres lors de l'appel d'un proc stocké.S'il vous plaît prendre un coup à cet échantillon VB.Net Oracle et aidez-moi avec String.Format
Les processus stockés Oracle et MSFT sont générés; les Oracle ont 3 paramètres supplémentaires:
Vret_val out number,
Vparam2 in out number,
Vparam3 in out number,
... the rest
(Le fait ne sont pas nommés Vparam2 et Vparam3, mais cela ne devrait pas d'importance). Ainsi, le code pour une aide classe VB.Net qui appelle un proc stocké:
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
...
Question: Je suis perplexe quant à ce String.Format("{{call {0}(?)}}", spName)
le fait, en particulier la partie (?)
. Ma compréhension du String.Format est qu'il remplacera simplement {0} par spName. Le {{
, }}
, et (?)
me rejettent parce que {
me rappelle le formatage, (?)
allusions à une certaine utilisation regex avancée.
Malheureusement, je reçois peu d'aide d'une personne clé qui est en vacances sans
leash
[smart] phone.
Je devine que j'ajoute simplement 5 lignes de plus pour chaque paramètre supplémentaire, et change String.Format("{{call {0}(?)}}", spName)
en String.Format("{{call {0}(?,?,?)}}", spName)
. J'ai oublié de mentionner que je code ce "aveuglément" - j'ai un compilateur pour m'aider, mais aucun environnement mis en place pour tester cela.
Ce sera plus dans quelques jours, mais je dois faire de mon mieux pour essayer de terminer à temps :)
Merci.
Merci ... mais qu'advient-il du '(?)'? –
@Hamish: J'ai mis à jour la réponse. –
Merci encore ... maintenant, à propos de la signification de '(?)' - était-ce une supposition. Je dois en ajouter 2 de plus, donc devrait-il être '(???)', '(?,?,?)', '(?) (?) (?)', '(?), (?), (?) ', ou autre chose? Cette question de suivi est ouverte à tous. –