.NET Button Control, событие OnClick: (Try, Catch Statement?) - PullRequest
1 голос
/ 31 октября 2011

У меня есть кнопка на веб-странице, и мне просто нужна небольшая помощь с дополнительным кодом.Я думаю, что мне нужен оператор TRY, CATCH ?, вот что у меня есть:

У меня есть простая веб-страница, на которой есть кнопка, которая в момент нажатия позволяет пользователю добавлять данные в БДтаблица с помощью хранимой процедуры.После нажатия этой кнопки появляется всплывающее окно с сообщением, чтобы пользователь знал, что данные были переданы.Затем пользователю необходимо нажать кнопку «ОК» в этом окне сообщения, которое затем направит его на домашнюю страницу сайта.Это прекрасно работает.

Код для этого здесь:

Protected Sub btnAddRawData_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAddRawData.Click

    'database conn, this is linked to the web config file .AppSettings
    Using dbconnection As New SqlConnection(ConfigurationManager.AppSettings("dbconnection"))
        dbconnection.Open()

        'command to state the stored procedure and the name of the stored procedure
        Using dbcommand As SqlCommand = dbconnection.CreateCommand
            With dbcommand
                .CommandType = CommandType.StoredProcedure
                .CommandText = "RawData_Insert"

                'simply execute the query
                dbcommand.ExecuteNonQuery()

                'Code to make a pop up work. It enables us to use and call the function
                'located on the main Rawdata.aspx page.
                Dim cs As ClientScriptManager = Page.ClientScript
                Dim csname1 As String = "PopupScript"
                Dim cstype As Type = Me.GetType()
                Dim cstext1 As New StringBuilder()
                cstext1.Append("success();")
                cs.RegisterStartupScript(cstype, csname1, cstext1.ToString())

                'redirect to the main home page
                Response.Redirect("~/default.aspx?")

            End With
        End Using
    End Using

End Sub

Поскольку я не хочу, чтобы пользователь вводил повторяющиеся записи в базе данных (Это может быть сделано пользователем, переходящимвернуться на страницу, где находится btnAddRawData_Click и снова нажать ее.), я создал УНИКАЛЬНЫЙ ИНДЕКС с именем 'DupRecords', чтобы пользователь не мог фиксировать эти данные более одного раза в день.

Когда я запускаюТеперь на веб-странице в браузере появляется следующее сообщение:

Невозможно вставить строку с двойным ключом в объект 'dbo.GasRawData' с уникальным индексом 'DupRecords'.Оператор был прекращен.

Решение, я думаю, состоит в том, чтобы добавить оператор TRY, CATCH в код btnAddRawData_Click.Может кто-нибудь указать мне правильное направление и помочь мне поставить здесь, поскольку я новичок в программировании и не имею большого опыта в этой области.

С уважением, Бетти.

Ответы [ 2 ]

2 голосов
/ 31 октября 2011

Первое, что нужно понять, вы не должны полностью полагаться на обработку исключений для чего-то вроде проверки ограничения целостности БД. Лучшим решением было бы попытаться проверить данные, прежде чем даже пытаться выполнить операцию с БД, в отличие от простого запуска команды БД, надежды на лучшее и обработки нарушений ограничений, которые могут произойти.

В любом случае для всестороннего введения в обработку исключений обратитесь к MSDN

0 голосов
/ 31 октября 2011

Вы можете запретить пользователю вернуться на предыдущую страницу с помощью переменной session, которая очищается при успешном завершении хранимой процедуры.

Затем проверяйте переменную сеанса при загрузке страницы - если она не установлена, то response.redirect для домашней страницы?

...