2017-02-08 2 views
0

У меня есть головоломка.Программа отправляет данные, но база данных не получает ее

В моей программе VB.net в нескольких местах я общаюсь с моей базой данных SQLserver. Я использую операторы Insert, Update и Select. Моя программа состоит из нескольких форм, и моя база данных имеет 4 таблицы.

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

Обрабатываемые формы и таблицы базы данных отлично работают, когда операторы select и Insert полностью функционируют, однако код инструкции обновления не является. Когда я прохожу через него, он ведет себя так, как будто он отправил данные в базу данных, однако база данных никогда не получает ее. Данные подключения идентичны работающим субмаринам, а код в том же формате, что и мой код обновления, в других формах моей программы. Поэтому я не понимаю, почему он не работает.

Вот код:

Public selectedDeviceNumber As String = "" 
Public selectedDeviceRowNumber As Integer = 0 

'================================ 
'= Set up the DATASETS!   = 
'================================ 
Dim PCBconnectionstring As String = "Data Source=ServerName;Initial Catalog=Databasename;User Id=UserId;Password=password;Connect Timeout=30;User INstance=False" 
Dim PCBsqlconnection As New SqlClient.SqlConnection(PCBconnectionstring) 
Dim damyPCB As New SqlDataAdapter 
Dim dsmyPCB As New DataSet 
Dim ALcon As New SqlConnection 
Dim ALcmd As New SqlCommand 
Dim PCBcmd As New SqlCommand 
Dim PCBcon As New SqlConnection 
'================================ 
'= SAVE the data!    = 
'================================ 
Dim test As String = Me.selectedDeviceNumber 

    Private Sub SaveToDataBaseFunctionPCB() 
     'update the data entered to the database 
     Try 
      PCBsqlconnection.ConnectionString = "Data Source=ITWIN10-PC\SQL2010;Initial Catalog=SLE1000;User Id=UserId;Password=password;Connect Timeout=30;User Instance=False" 
      PCBsqlconnection.Open() 
      PCBcmd.Connection = PCBsqlconnection 
     PCBcmd.CommandText = "UPDATE PCBlist SET [email protected],[email protected],[email protected],[email protected]," & _ 
      "[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]," & _ 
      "[email protected],[email protected],[email protected],[email protected] WHERE [email protected] " 
     PCBcmd.Parameters.AddWithValue("@pcbSerial", txtSerialPCB1.Text) 
     PCBcmd.Parameters.AddWithValue("@pcbPart", cboPartPCB1.Text) 
      PCBcmd.Parameters.AddWithValue("@pcbVent", txtVentPCB1.Text) 
      PCBcmd.Parameters.AddWithValue("@pcbDesc", txtDescriptPCB1.Text) 
      PCBcmd.Parameters.AddWithValue("@pcbTested", chkTested1.Checked) 
      PCBcmd.Parameters.AddWithValue("@pcbU1", txtU11.Text) 
      PCBcmd.Parameters.AddWithValue("@pcbU5", txtU51.Text) 
      PCBcmd.Parameters.AddWithValue("@pcbU7", txtU71.Text) 
      PCBcmd.Parameters.AddWithValue("@pcbU10", txtU101.Text) 
      PCBcmd.Parameters.AddWithValue("@pcbU11", txtU111.Text) 
      PCBcmd.Parameters.AddWithValue("@pcbVersion", txtVersionPCB1.Text) 
      PCBcmd.Parameters.AddWithValue("@pcbTestIni", txtTestPCB1.Text) 
      PCBcmd.Parameters.AddWithValue("@pcbApplyIni", txtApplyPCB1.Text) 
      PCBcmd.Parameters.AddWithValue("@pcbTestDate", txtTestDatePCB1.Text) 
      PCBcmd.Parameters.AddWithValue("@pcbApplyDate", txtApplyDatePCB1.Text) 
     PCBcmd.Parameters.AddWithValue("@pcbID", Me.selectedDeviceNumber) 
      PCBcmd.ExecuteNonQuery() 
      PCBcmd.Parameters.Clear() 
      PCBsqlconnection.Close() 
      MsgBox("Data updated") 
     Catch ex As Exception 
      MessageBox.Show(ex.Message) 
     Finally 
      PCBsqlconnection.Close() 
     End Try 
End Sub 

    `Private Sub btnAmend_Click(sender As System.Object, e As System.EventArgs) Handles btnAmend.Click 
    'Save the data to SQL Server 
    SaveToDataBaseFunctionPCB() 
    'record activity in Activity Log 
    FrmSLE1000.txtActivityLogRecorder.Text = ("Data Saved") 
    'Save the Activity log data to SQL Server 
    SaveToDataBaseFunction1() 
    'SLE1000SqlConnection = New SqlConnection(frmConnections.lblDBConnection.Text & frmConnections.lblDBConnection2.Text) 
End Sub 

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

Большое спасибо

+3

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

+0

проверьте значение 'Me.selectedDeviceNumber' в' PCBcmd.Parameters.AddWithValue ("@ pcbID", Me.selectedDeviceNumber) '. – tezzo

+0

Если вы используете MySQL, вы должны использовать официальный [коннектор] (https://dev.mysql.com/doc/connector-net/en/connector-net-programming-connecting-open.html) –

ответ

0

После обширного пустячный с моего кода я исправил проблему. Как выясняется, проблема снова лежит в коде. Когда вызывается оператор Select, он загружает данные в представление списка, которое затем выбирает строку, которую вы хотите отредактировать. В этот момент уволили ex исключение, однако данные все еще передавались в текстовые поля, чтобы вы могли редактировать данные, поэтому я мысленно «припарковал» этот сбой для дальнейшего. При решении этой проблемы кнопка «Изменить» и функция обновления работают нормально.

Если вы заинтересованы оригинальный глюк в коде следующим образом

 Private Sub lvPCB1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvPCB1.DoubleClick 
    Dim newmachine As String = FrmSLE1000.txtNo.Text 
    Try 
     If lvPCB1.SelectedItems.Count = 0 Then 
      MessageBox.Show("Ensure that you have selected a PCB Board. Try again.") 
      Exit Sub 
     Else 
      'Set selected units ID number in varable to allow access to all row data to populate tables 
      selectedDeviceNumber = lvPCB1.SelectedItems(0).Text 
      PopulateTablesFunctionPCB() 
      txtSerialPCB1.Text = lvPCB1.SelectedItems(1).Text 
      'record activity in Activity Log 
     End If 
    Catch ex As Exception 
     MessageBox.Show("Problem with selection") 
    End Try 
End Sub 

и новый рабочий код выглядит следующим образом

Private Sub lvPCB1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvPCB1.DoubleClick 
    Dim newmachine As String = FrmSLE1000.txtNo.Text 
    Try 
     If lvPCB1.SelectedItems.Count = 0 Then 
      MessageBox.Show("Ensure that you have selected a PCB Board. Try again.") 
      Exit Sub 
     Else 
      'Set selected units ID number in varable to allow access to all row data to populate tables 
      selectedDeviceNumber = lvPCB1.SelectedItems(0).Text 
      PopulateTablesFunctionPCB() 
      txtSerialPCB1.Text = lvPCB1.SelectedItems(0).Text 
      'record activity in Activity Log 
     End If 
    Catch ex As Exception 
     MessageBox.Show("Problem with selection") 
    End Try 
End Sub 

Таким образом, все это сводилось к тому, «1 "вместо" 0 "в строке" txtSerialPCB1.Text = lvPCB1.SelectedItems (0) .Text "

И вот он у вас есть!