将参数绑定到存储过程
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所以你可能需要稍微修改一下
我有下面的代码来尝试将两个不同的参数绑定到存储过程:
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所以你可能需要稍微修改一下