2011-11-03 67 views
1

我用下面的VB代碼到我的SQL服務器上執行標量函數:在VB中,設置命令對象的參數似乎無法

cmd.CommandText = "[STFRA].[dbo].MyScalarFunc" 

     cmd.Parameters.Add("@Fastener", SqlDbType.Int) 
     cmd.Parameters("@Fastener").Value = 4148 
     cmd.Parameters.Add("@Thickness", SqlDbType.Float) 
     cmd.Parameters("@Thickness").Value = 3.2 
     cmd.Parameters.Add("@Material", SqlDbType.VarChar, 10) 
     cmd.Parameters("@Material").Value = a 
     cmd.Parameters.Add("@Shear", SqlDbType.VarChar, 2) 
     cmd.Parameters("@Shear").Value = 1 


     Dim retObj As Object = cmd.ExecuteScalar(cmd) 

隨着錯誤消息我回來:過程或函數「MyScalarFunc '期望沒有提供參數'@ Fastener'參數。 參數名稱,順序和類型與服務器上的完全相同。當在觀察列表中觀看cmd時,我可以看到4個參數被添加到它。 任何想法?

+0

試運行[SQL Server事件探查](http://msdn.microsoft.com/en-us/library/ms181091(v = SQL.100)的.aspx)跟蹤和捕獲** RPC:啓動** EventClass以查看傳遞給存儲過程的參數。 –

回答

0

我有一段時間沒有這樣做過,但是您確定需要將@符號添加到VB中的參數名稱嗎?這是一個SQL Server語法。只要做到:

 cmd.CommandText = "[STFRA].[dbo].MyScalarFunc" 
    cmd.Parameters.Add("Fastener", SqlDbType.Int) 
    cmd.Parameters("Fastener").Value = 4148 
    cmd.Parameters.Add("Thickness", SqlDbType.Float) 
    cmd.Parameters("Thickness").Value = 3.2 
    cmd.Parameters.Add("Material", SqlDbType.VarChar, 10) 
    cmd.Parameters("Material").Value = a 
    cmd.Parameters.Add("Shear", SqlDbType.VarChar, 2) 
    cmd.Parameters("Shear").Value = 1 
    Dim retObj As Object = cmd.ExecuteScalar(cmd) 
0
cmd.CommandType = CommandTypes.StoredProcudure