我试图创建一个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
感谢
答案 0 :(得分:0)
AFAIK SqlClient不支持无名参数
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