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

cc0*_*cc0 3 sql vb.net sql-server stored-procedures sql-server-2005

你可能很快就会看到,我是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()
Run Code Online (Sandbox Code Playgroud)

我得到了错误;

此SqlParameterCollection不包含带有ParameterName'@PlaceID'的SqlParameter.

有谁看到我做错了什么/有什么建议我怎么解决它?代码示例非常有用,非常感谢任何帮助.

Har*_*ode 8

您实际上并未将参数添加到cmd.Parameters集合中:

cmd.Parameters.Add(par)
Run Code Online (Sandbox Code Playgroud)

或者,只需添加参数而不显式实例化Parameter对象:

cmd.Parameters.Add("@PlaceID", SqlDbType.Int)
cmd.Parameters("@PlaceID").Value = 3906
Run Code Online (Sandbox Code Playgroud)

另外,我遵循使用尽可能接近声明的变量的原则,并以这种方式重新组织:

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
Run Code Online (Sandbox Code Playgroud)