程序发送数据但数据库不接收数据

时间:2017-02-08 15:41:03

标签: sql-server vb.net

我有一个难题。

在我的VB.net程序中,我在多个地方与SQLserver数据库进行通信。我使用Insert,Update和Select语句。我的程序由多个表单组成,我的数据库有4个表。

除了我的一个潜艇外,所有潜艇都在工作,尽管使用了断点并且完成了代码,但我无法弄明白为什么。

有问题的表单和数据库表很好,select和Insert语句完全正常运行,但update语句的代码却没有。当我遍历它时,它表现得好像已经将数据发送到数据库,但数据库从未接收到它。连接数据与功能sub相同,代码格式与我程序中其他形式的更新代码相同。所以我不明白为什么它不起作用。

以下是代码:

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 pcbSerial=@pcbSerial,pcbPart=@pcbPart,pcbVent=@pcbVent,pcbDesc=@pcbDesc," & _
            "pcbTested=@pcbTested,pcbU1=@pcbU1,pcbU5=@pcbU5,pcbU7=@pcbU7,pcbU10=@pcbU10,pcbU11=@pcbU11,pcbVersion=@pcbVersion," & _
            "pcbTestIni=@pcbTestIni,pcbApplyIni=@pcbApplyIni,pcbTestDate=@pcbTestDate,pcbApplyDate=@pcbApplyDate WHERE pcbID=@pcbID "
        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

如果您有任何想法,请告诉我。可能是我一直在查看代码太长而且很明显,但是我看不出问题。

非常感谢

1 个答案:

答案 0 :(得分:0)

在彻底摆弄我的代码之后,我已经解决了这个问题。事实证明问题在于代码中的问题。调用Select语句时,它会将数据加载到列表视图中,然后选择要编辑的行。此时正在触发异常捕获,但数据仍然被传递到文本框,以便您可以编辑数据,因此我在心理上停放了#39;这个故障以后再说。在解决这个故障时,修改"按钮和更新功能工作正常。

如果您感兴趣,代码中的原始故障如下

        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"

你有它!