Вставить vb.net в sql с / ComboBox и datetimepicker

#sql-server #vb.net #combobox #datetimepicker

#sql-сервер #vb.net #выпадающий список #datetimepicker

Вопрос:

что я делаю не так??? У меня есть 7 текстовых полей, 1 указатель даты и времени и 1 поле со списком в моей форме. Когда я нажимаю кнопку сохранения, она ничего не делает, точно так же, как новая кнопка без кода, даже не сохраненное сообщение клиента или сообщение об ошибке.

     Private Sub btnSaveCust_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveCust.Click
    Try
        Dim sex As String
        sex = ""
        If cbSex.SelectedIndex >= 0 Then
            sex = cbSex.Items(cbSex.SelectedValue).ToString
        End If

        Dim conex As New SqlConnection("Data Source=localhost;Initial Catalog=BD_;Integrated Security=True")
        Dim query As String = "SELECT * FROM tableCustomer WHERE ID=@ID"
        Dim cmd1 As SqlCommand = New SqlCommand(query, conex)
        cmd1.Parameters.AddWithValue("@ID", txtID.Text)
        cmd1.Parameters.AddWithValue("@[Today date]", txtToday.Text)
        cmd1.Parameters.AddWithValue("@Name", txtName.Text)
        cmd1.Parameters.AddWithValue("@Middlename", txtMiddle.Text)
        cmd1.Parameters.AddWithValue("@[Last name]", txtLastName.Text)
        cmd1.Parameters.AddWithValue("@Birth", DateTimePickerBirth.Value)
        cmd1.Parameters.AddWithValue("@Age", txtAge.Text)
        cmd1.Parameters.AddWithValue("@Sex", cbSex.SelectedValue)
        cmd1.Parameters.AddWithValue("@Phone", txtPhone.Text)
        cmd1.Parameters.AddWithValue("@E-mail", txtEmail.Text)
        conex.Open()

        Using read As SqlDataReader = cmd1.ExecuteReader()
            If read.HasRows Then
                MsgBox("ID '" amp; txtID.Text amp; "' already in DB. Enter another ID", MessageBoxIcon.Error)
                txtID.Focus()
            Else
                read.Close()
                Dim cmd As SqlCommand = New SqlCommand _
                                        ("Insert into [BD_].[dbo].[tableCustomer] ([ID],[Today date],[Name],[Middlename],[Last name],[Birth],[Age],[Sex],[Phone],[E-mail]) values ('"   txtID.Text   "','"   txtToday.Text   "','"   txtName.Text   "','"   txtMiddle.Text   "','"   txtLastName.Text   "','"   DateTimePickerBirth.ToString("dd MM yyyy")   "','"   txtAge.Text   "','"   sex   "','"   txtPhone.Text   "','"   txtEmail.Text   "')", conex)
                conex.Open()
                cmd.ExecuteNonQuery()
                MsgBox("Customer '" amp; txtName.Text amp; "' saved.", MessageBoxIcon.Information)
                conex.Close()
            End If
        End Using

    Catch ex As Exception

    End Try
End Sub
  

Ответ №1:

Если у вас есть доступ к профилировщику SQL (в SQL Server), вы можете перехватить SQL, отправляемый из вашего приложения, скопировать, вставить и запустить его непосредственно в окне запроса SQL Server, и вы должны увидеть любые ошибки… Кроме того, добавьте свои данные с помощью хранимой процедуры, вы обнаружите, что работать с ней намного проще…

Комментарии:

1. Спасибо за ответ, Монти, я пробовал использовать хранимую процедуру, как ты сказал, но это то же самое, при нажатии кнопки ответа нет, это похоже на новую кнопку без кода. Уже удалите кнопку и добавьте новую… и все еще не работает, он не запускает действие

2. «Это не запускает действие», значит, с вашими файлами проекта что-то еще не так… проще всего было бы создать новый VB.net проект, добавьте кнопку, дважды щелкните по ней, чтобы создать заглушку события, затем поставьте точку останова в коде и запустите приложение….

3. Кроме того, в приведенном выше коде убедитесь, что кнопка в вашей форме называется «btnSaveCust»