VB.NET在DetailsView中引用Label的文本

时间:2011-10-07 18:25:07

标签: asp.net sql vb.net syntax

我正在尝试从我的CodeBehind中的DetailsView中的标签引用该文本,然后将其传递给存储过程。

我的DetailsView是DetailsView1,两个字段是lblDialID& lblCallbackID。我已将它们转换为TemplateFields。数据填充正确,但是当我试图抓取数据并通过它时,我没有得到任何结果。

存储过程没有执行它的操作,并且变量上的Response.Write不会产生任何结果所以假设我只是抓住空气稀薄:)

这里有什么指导吗?

Protected Sub lnkCBtoPUB_Click(ByVal sender As Object, ByVal e As EventArgs)    
Dim Conn As New SqlConnection("Data Source=SERVER;Initial Catalog=DATABASE;User ID=USER;Password=PASSWORD")
Dim MyCommand As New SqlCommand
Dim sDialID As Label = CType(DetailsView1.FindControl("lblDialID"), Label)
Dim sCallbackID As Label = CType(DetailsView1.FindControl("lblCallbackID"), Label)

Conn.Open()
MyCommand.Connection = Conn
MyCommand.CommandType = CommandType.StoredProcedure
MyCommand.CommandText = "spAlterAgentCallback"
MyCommand.Parameters.AddWithValue("@DialID", sDialID.Text)
MyCommand.Parameters.AddWithValue("@CallbackID", sCallbackID.Text)

MyCommand.ExecuteNonQuery()

Conn.Close()
Conn.Dispose()
MyCommand.Dispose()
End Sub

这是存储过程

ALTER PROCEDURE [dbo].[spAlterAgentCallback]
@DialID AS INT,
@CallBackID AS INT
AS
BEGIN
UPDATE DIAL 
SET CBDATETIME = GETDATE(),
AgentID = '',
CRC = 'SCBR',
Notes = 'This Record Was Recently a Callback for Another Agent.'
WHERE DialID = @DialID

DELETE FROM CALLBACK WHERE CallBackID = @CallBackID
END 

<> 这可能是因为我传递了一个字符串,但是SP将它作为INT吗?这应该不会造成问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

在您的AddWithValue中,您需要访问标签的Text属性,而不是将Label对象传递到proc中,您应该没问题。

所以:

MyCommand.Parameters.AddWithValue("@DialID", sDialID.Text)
MyCommand.Parameters.AddWithValue("@CallbackID", sCallbackID.Text)

如果你没有得到控件,它会抛出一个NullReferenceException。

修改

对于SP,您需要隔离问题发生的位置。尝试从SQL Management Studio运行SProc,提供.NET将传入的参数并确认proc正在运行。如果它确实有效,我会调试你的代码以确保值成为参数。 Integer类型无关紧要,因为.NET稍后会查找该类型。如果您想要安全,可以在将它们发送到Proc之前将它们解析为整数。

<强> EDIT2:

您可以尝试以这种方式使用隐藏字段:

(详情视图中的某处)

<asp:HiddenField ID="_CtlDialIDHidden" runat="server" Value='<%#Eval("DialID")%>' />
<asp:HiddenField ID="_CtlCallbackIDHidden" runat="server" Value='<%#Eval("CallbackID")%>' />

并在您的点击事件中

If Request.Form.AllKeys.Contains("_CtlDialIDHidden") Then
    MyCommand.Parameters.AddWithValue("@DialID",  Request.Form.Item(Request.Form.AllKeys.FirstOrDefault(Function(x As String) x.Contains("_CtlDialIDHidden"))))
End If
If Request.Form.AllKeys.Contains("_CtlCallbackIDHidden") Then
    MyCommand.Parameters.AddWithValue("@CallbackID",  Request.Form.Item(Request.Form.AllKeys.FirstOrDefault(Function(x As String) x.Contains("_CtlCallbackIDHidden"))))
End If

您可能必须查看源以查看传回的名称的确切内容,而不是使用lambda表达式。