你可能很快就会看到,我是VB.NET的新手,我在SQL Server 2005中从存储过程获取输出时遇到了一些麻烦。
这是我使用的代码
Dim con As New SqlConnection
Dim cmd As New SqlCommand("esp_getDates", con)
Dim par As New SqlParameter("@PlaceID", SqlDbType.Int, 3906)
con.ConnectionString = "Data Source=localhost\SQLEXPRESS;Initial Catalog=ProgramDB;User ID=test;Password=test"
con.Open()
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters("@PlaceID").Direction = ParameterDirection.Output
cmd.ExecuteNonQuery()
con.Close()
我得到错误;
带有ParameterName的SqlParameter '@PlaceID'不包含在内 SqlParameterCollection。
有没有人看到我做错了什么/有什么建议我可以解决它吗?代码示例非常有用,非常感谢任何帮助。
答案 0 :(得分:8)
您实际上并未将参数添加到cmd.Parameters集合中:
cmd.Parameters.Add(par)
或者,只需添加参数而不显式实例化Parameter对象:
cmd.Parameters.Add("@PlaceID", SqlDbType.Int)
cmd.Parameters("@PlaceID").Value = 3906
另外,我遵循使用尽可能接近声明的变量的原则,并以这种方式重新组织:
Dim con As New SqlConnection("Data Source=localhost\SQLEXPRESS;Initial Catalog=ProgramDB;User ID=test;Password=test")
con.Open()
Dim cmd As New SqlCommand("esp_getDates", con)
Try
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@PlaceID", SqlDbType.Int)
cmd.Parameters("@PlaceID").Value = 3906
cmd.ExecuteNonQuery()
Finally
If cmd IsNot Nothing Then cmd.Dispose()
If cn IsNot Nothing AndAlso cn.State <> ConnectionState.Closed Then cn.Close()
End Try