请尝试一下这个与VB.NETOracle相关的示例,并帮助我使用String.Format

请尝试一下这个与VB.NETOracle相关的示例,并帮助我使用String.Format,vb.net,oracle,stored-procedures,string-formatting,Vb.net,Oracle,Stored Procedures,String Formatting,如果数据库不是Oracle,则是MS SQl 2008。 我的任务:如果是Oracle,则在调用存储过程时再添加两个参数 生成Oracle和MSFT存储过程;Oracle One有3个额外参数: Vret_val out number, Vparam2 in out number, Vparam3 in out number, ... the rest (实际名称不是Vparam2和Vparam3,但这并不重要)。 因此,调用存储过程的帮助器VB.Net类的代码: Imports System

如果数据库不是Oracle,则是MS SQl 2008。 我的任务:如果是Oracle,则在调用存储过程时再添加两个参数

生成Oracle和MSFT存储过程;Oracle One有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的理解是,它将用spName简单地替换{0}。
{{
}
(?)
确实让我感到厌烦,因为
{
提醒我格式化,
(?)
提示一些高级正则表达式的使用

不幸的是,我没有从一个关键人物那里得到什么帮助,他正在度假,没有皮带[智能]手机

我猜我只是为每个额外的参数再添加5行,然后将
String.Format({call{0}(?)},spName)
更改为
String.Format({{call{0}(?,?)}),spName)
。我忘了说我是“盲目地”编码的——我有一个编译器可以帮助我,但没有设置环境来测试这一点

这将在几天后结束,但我需要尽我最大的努力按时完成:)

谢谢。

String.Format({call{0}(?)},spName)
将生成如下字符串:
“{call ProcName(?)}”
(假设
spName
包含字符串
ProcName
)。
{{
和}}
如果要包含
{code>
},则需要使用
{`在字符串中,而不将其作为格式的一部分

文件中提到了这一点:

前后撑杆 字符“{”和“}”是必需的。 指定单个文字大括号的步骤 字符格式,指定两个字符 前后大括号字符; 即“{{”或“}}”

(?)
对于
string.Format
函数没有什么特殊的意义,但是在执行给定的过程时将使用它,每个问号表示应该传递给过程的参数。

string.Format({{call call{0}(?)},spName)
将生成如下字符串:
“{call ProcName(?)}”
(假设
spName
包含字符串
ProcName
)。如果希望在字符串中包含
{
或'}}
,而不将其作为格式的一部分,则需要使用
{
和'}}

文件中提到了这一点:

前后撑杆 字符“{”和“}”是必需的。 指定单个文字大括号的步骤 字符格式,指定两个字符 前后大括号字符; 即“{{”或“}}”


(?)
对于
string.Format
函数没有什么特殊的意义,但是在执行给定的过程时将使用它,每个问号表示应该传递给过程的参数。

谢谢……但是
(?)
会发生什么情况呢?再次感谢……现在,关于
(?)的含义
-这是一个猜测。我必须再添加两个,所以应该是
(?)
(?,?,?)
(?)(?)(?)(?)
(?),(?),(?)
,还是其他什么?这个后续问题对每个人都开放。没有测试过,我会猜第二个选项:
(?,,,?,,?)
。谢谢……但是
(?)会发生什么事呢
?再次感谢…现在,关于
(?)
的含义,这是一个猜测。我必须再添加两个,那么应该是
(?)
(?,?,?)
(?)(?)(?)
(?),(?),(?)
,还是其他什么?这个后续问题对每个人都是开放的。在没有测试的情况下,我猜第二个选项:
(?,,?,,?)