sql - 从 VB.NET 调用存储过程的问题

标签 sql sql-server vb.net sql-server-2005 stored-procedures

您可能很快就会看到,我是 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()

我得到了错误;

An SqlParameter with ParameterName '@PlaceID' is not contained by this SqlParameterCollection.

有没有人看到我做错了什么/有什么建议可以解决它?代码示例将非常有帮助,非常感谢任何帮助。

最佳答案

您实际上并未将参数添加到 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

关于sql - 从 VB.NET 调用存储过程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2299364/

相关文章:

vb.net - IsNot Nothing 没有失败

vb.net - SSIS 循环遍历 Excel 工作表

获取具有一个属性但不具有另一个属性的值的 SQL 语句

mysql - 如何从mysql中的连接查询中删除重复行

使用 UNION 时 SQL 查询不起作用?

mysql - 类似 IDE 的系统 - 用于存储的数据库或文件系统

C#/SQL 语法错误

sql-server - Azure SQL 数据库中的 SQL Server Telegraf 插件需要哪些拨款

c# - 使用计时器处理类的正确方法是什么?

sql-server - 一个表可以是 "too small"通过索引它有什么好处吗?