添加没有名称的sqlparameter

时间:2014-12-01 17:55:00

标签: vb.net vb6 sqlparameter

我试图创建一个sub来添加任意数量的参数,我曾经在vb6中这样做但是在vb.net这里需要我提供参数名称(.add(@parameter,值))。我需要在不知道参数名的情况下找到一种方法来实现它,我曾经使用存储过程中的参数顺序发送参数,这里是代码:

Public Sub EjecutarSP(ByVal SP As String, ByVal ParamArray Parametros() As Object)
    Dim cnn As New SqlConnection(ConfigurationSettings.AppSettings("connString").ToString)
    Dim cmd As New SqlCommand(SP, cnn)
    Dim i As Integer
    Dim Param As SqlParameter
    Try
        For i = 0 To UBound(Parametros)
            Param = New SqlParameter("str", Parametros(i))
            cmd.Parameters.Add(Param)
        Next
        cmd.CommandTimeout = 0
        cmd.CommandType = CommandType.StoredProcedure
        If cmd.Connection.State <> ConnectionState.Open Then cmd.Connection.Open()
        cmd.ExecuteNonQuery()
        cmd = Nothing
    Catch ex As Exception
        Err.Raise(1000, "EjecutarSP", ex.Message)
    End Try
End Sub

感谢

3 个答案:

答案 0 :(得分:0)

AFAIK SqlClient不支持无名参数

From here:

  

SQL Server的.NET Framework数据提供程序不支持无名称,也称为序数参数。

但是,一旦连接,您可以使用DeriveParameters获取Proc的参数,而不是显式创建参数。

假设您希望盲目地希望信任参数的顺序以匹配Proc的参数,只需设置parameters at the given index.Value

Dim cmd As New SqlCommand(SP, cnn)
...
SqlCommandBuilder.DeriveParameters(cmd)
For i = 0 To UBound(Parametros)
    cmd.Parameters(i).Value = Parametros(i)
Next

答案 1 :(得分:0)

添加参数后,只需将名称重置为空(null),如下所示:

JSONObject response=new JSONObject(res);
if(res.get("key") instanceOf JSONObject)
{
// code for JSONObject
}
else if(res.get("key") instanceOf JSONArray)
{
// code for JSONOArray
}
And so on

答案 2 :(得分:0)

您不必显式命名或键入参数。实际上,有两种方法可以在不命名每个参数的情况下执行存储的proc。这是使用微软旧的EnterpriseLibrary的一种方法(我在2019年仍会喜欢)。

注意:在VB.NET中,参数数组的大小比存储的proc中的参数数小1。

    Dim dt As System.Data.DataTable
    Dim arrParameters(6) As Object

    arrParameters(0) = "Hello"
    arrParameters(1) = "World"
    arrParameters(2) = "Lorem"
    arrParameters(3) = "Ipsum"
    arrParameters(4) = "Dolor"
    arrParameters(5) = "Blabla"
    arrParameters(6) = 12345

    Try
        Dim db As Microsoft.Practices.EnterpriseLibrary.Data.Database = Microsoft.Practices.EnterpriseLibrary.Data.DatabaseFactory.CreateDatabase("TheNameOfYourConnectionStringInWebConfig")
        dt = db.ExecuteDataSet("TheNameOfYourStoredProcedure", arrParameters).Tables(0)
    Catch ex As Exception

    End Try