двойная вставка в sql db путем кодирования asp - PullRequest
0 голосов
/ 13 октября 2011

этот код работает нормально, но он вставляет одни и те же данные дважды в sql db всего одним нажатием кнопки.если я допустил ошибку, пожалуйста, дайте мне знать ..

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim cmd As New SqlCommand
        Dim str As String

        str = "insert into cmember(name,period,design,duty,quali,cont)values ('" & TextBox1.Text & "', '" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "', '" & TextBox5.Text & "','" & TextBox6.Text & "')"

        If con.State = ConnectionState.Closed Then
            con.Open()

        End If

        Try
            cmd.CommandType = CommandType.Text
            cmd.Connection = con
            cmd.CommandText = str


        Catch ex As Exception

            MsgBox(e.ToString)
        End Try

        If cmd.ExecuteNonQuery Then

            Label1.Text = "entry saved"


            con.Close()
        Else
            Label1.Text = "entry not saved"
        End If
    End Sub

Ответы [ 3 ]

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

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

Не по теме: не используйте жестко закодированный оператор SQLИспользуйте параметризованный запрос.(Читайте о SQL-инъекции )

str = "insert into cmember (name,period,design,duty,quali,cont) values 
                   (@name,@period,@design,@duty,@quali,@cont)"
0 голосов
/ 13 октября 2011

Ваш код не появляется для двойной вставки этих данных.

Лучший способ выяснить, что именно происходит, - запустить трассировку через SQL Server Profiler.Для этого вам необходимо убедиться, что у вас есть ALTER TRACE разрешения для экземпляра.

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

Это может показаться глупым, но вы не дважды нажимаете на кнопку, не так ли? Кроме того, никогда не используйте вызов Msgbox в ASP - окно сообщения появится на сервере, а не в браузере, и будет блокировать поток, пока не будет нажата кнопка. Вам гораздо лучше создать элемент управления ASP Label и присвоить ему текст. Кроме того, бит, заключенный в блок Try, является просто настройками и никогда не выдаст ошибку - блок try должен находиться вокруг команд, в которых вы открываете соединение, и где вы выполняете запрос.

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