2011-10-07 54 views
1

我試圖從CodeBehind中的DetailsView中的標籤引用文本,然後通過存儲過程傳遞它。VB.NET在DetailsView中引用標籤的文本

我的DetailsView是DetailsView1,兩個字段是lblDialID & lblCallbackID。我已將它們轉換爲TemplateFields。數據填充正確,但是當我試圖抓取數據並通過它時,我沒有收到任何結果。

存儲過程不執行它的行動,並在變量的Response.Write不會產生任何結果,因此assumedly我只是抓住空氣稀薄:)

任何指導意見嗎?

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

看起來像在你的AddWithValue中,你需要訪問標籤的Text屬性,而不是將Label對象傳遞給proc,你應該沒問題。

所以:

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

如果你沒有得到控制,它會拋出一個NullReferenceException。

編輯:

至於你需要隔離在問題發生的SP。嘗試從SQL Management Studio運行SProc,並提供.NET將傳入的參數並確認該進程正在運行。如果它確實起作用,我會調試你的代碼,以確保這些值能夠使它成爲參數。 Integer類型應該不重要,因爲.NET稍後會查找類型。如果你想要安全,可以在將它們發送給Proc之前將它們解析爲整數。

EDIT2:

你可以嘗試以這種方式使用隱藏字段:

(某處在你的DetailsView)

<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表達式。

+0

我做了適當的修改,而且我無法產生想要的結果。 – RogueSpear00

+0

存儲過程非常簡單。我已經添加了上面的存儲過程。 – RogueSpear00

+0

SP在SQL中工作正常,在編寫VB之前已經過測試。我仍然假設我沒有正確地抓住價值觀,並不是你錯了,但那只是我的假設。 – RogueSpear00