2014-12-01 49 views
1

我想創建一個sub來添加儘可能多的參數,因爲我想用vb6做這個但在vb.net中它需要我提供參數名(.add(@參數,值))。我需要找到一個方法來做到這一點不知道參數名稱,我用在存儲過程中使用的參數順序發送參數,這裏的代碼:添加沒有名稱的sqlparameter

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

AFAIK的SqlClient中沒有按「T支持無名參數

From here:

無名,也稱爲序,參數不被.NET Framework數據提供程序的SQL Server支持。

但是,不要顯式創建參數,只要連接,就可以使用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 
0

名稱只是重置一旦參數已被添加任何內容(空),這樣的事情:

For i = 0 To UBound(Parametros) 
     Param = New SqlParameter("str", Parametros(i)) 
     cmd.Parameters.Add(Param) 
     Param.ParameterName = Nothing 
    Next 
相關問題