VB.NET Ссылка на текст метки в DetailsView - PullRequest
1 голос
/ 07 октября 2011

Я пытаюсь сослаться на текст из метки в DetailsView в моем CodeBehind, а затем передать его через хранимую процедуру.

Моим 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 Ответ

1 голос
/ 07 октября 2011

Похоже, в вашем AddWithValue вам нужно получить доступ к свойству Text Labels вместо того, чтобы передавать объект Label в proc, и все будет в порядке.

Итак:

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

Если бы вы не получали элементы управления, это вызвало бы исключение NullReferenceException.

EDIT:

Что касается SP, вам необходимо определить, где возникает проблема. Попробуйте запустить SProc из SQL Management Studio, указав параметры, которые должен передать .NET, и убедитесь, что процесс запущен. Если это работает, я бы отладил ваш код, чтобы убедиться, что значения попадают в параметры. Тип 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

Возможно, вам придется просмотреть исходный код, чтобы точно узнать, какое имя передается назад, вместо использования лямбда-выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...