将参数绑定到存储过程

Binding parameters to stored procedure

我有下面的代码来尝试将两个不同的参数绑定到存储过程:

Dim ddlmanager As DropDownList = e.Row.FindControl("ddlManager")

            'ddlmanager.Items.Remove(ddlmanager.Items.FindByText(Name))
            Dim lblLevel As Label = e.Row.FindControl("lblLevel")
            Dim thisLevel = Convert.ToInt32(lblLevel.Text)
            Dim email As String = Profile.email

            Dim strConn As String = ConfigurationManager.ConnectionStrings("RequestManagementConnectionString").ConnectionString
            Dim cn As New Data.SqlClient.SqlConnection(strConn)
            Dim cmd As New Data.SqlClient.SqlCommand("RM_Private.SelectLineManagerOptions", cn)

            cmd.CommandType = Data.CommandType.StoredProcedure
            cmd.Connection = cn
            cmd.Parameters.AddWithValue("@thisLevel", thisLevel)
            cmd.Parameters.AddWithValue("@email", email)

            cn.Open()

            Dim dr As Data.SqlClient.SqlDataReader

            dr = cmd.ExecuteReader()
            ddlmanager.DataSource = dr
            ddlmanager.DataBind()

            cn.Close()

现在,当我在 Visual Studio 中调试它时,@email 被设置为来自 profile.email 的有效电子邮件地址,另一个参数 @thisLevel 也是如此。它似乎没有正确发送到存储过程。

有人可以帮忙吗?

谢谢。 DS

更新:上面的代码现在成功调用了存储过程。 更新:sp 调用成功并填充了 ddl

谢谢!

如果设置Option Strict On in your project properties. The SqlCommand.CommandType expects values of type SqlClient.Data.CommandType就可以避免这个问题。使用 Option Strict Off 您可以自由地将 SqlCommand 的 CommandType 设置为另一个枚举值,就像您使用 SqlDataSourceCommandType.StoredProcedure

但是 SqlDataSourceCommandType.StoredProcedure 的值为 (int)1,而正确的枚举 CommandType.StoredProcedure 的值为 (int)4。不是一回事。

Option Strict Off 的另一个受害者

不要使用 cmd.ExecuteNonQuery() 您需要将数据拉回某些东西,例如 SqlDataReader。将 DropDown 的数据源设置为 reader。

按照建议更改 CommandType。那么...

 Dim dr As SqlDataReader

dr = cmd.ExecuteReader()
ddlmanager.DataSource = dr

然后Bind

我不太了解VB.net所以你可能需要稍微修改一下