Click here to Skip to main content
15,887,318 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I need to insert some strings, binary data and integers into database. Some of those strings contains the constants like ' (apostrophe). So i thought i can insert those using parameters. When using the code below i had "Data Type Mismatch in Criteria Expression" Error.

VB
Function GetSiteValue() As String
       Dim r As String = ""
       If ls_Site.Items.Count > 0 Then
           For i As Integer = 0 To ls_Site.Items.Count - 1
               If i = 0 Then
                   r = ls_Site.Items(0).ToString
               ElseIf i > 0 Then
                   r &= ";" & ls_Site.Items(i).ToString
               End If
           Next
       End If
       Return r
   End Function
   Function GetDiagnosticsValue() As String
       Dim r As String = ""
       If ls_Diagnostics.Items.Count > 0 Then
           For i As Integer = 0 To ls_Diagnostics.Items.Count - 1
               If i = 0 Then
                   r = ls_Diagnostics.Items(0).ToString
               ElseIf i > 0 Then
                   r &= ";" & ls_Diagnostics.Items(i).ToString
               End If
           Next
       End If
       Return r
   End Function
   Function GetDetails() As Object()
       Dim ro As New Object()
       Dim List_ As New List(Of Object)
       List_.Add(txt_ReportNumber.Text.ToUpper.Replace("-", "/"))
       List_.Add(txt_SurName.Text)
       List_.Add(txt_PatientName.Text)
       List_.Add(txt_Age.Text)
       List_.Add(txt_Gender.Text)
       List_.Add(txt_Test.SelectedValue)
       'List_.Add(GetSiteValue)
       List_.Add(txt_AddressLine1.Text)
       List_.Add(txt_AddressLine2.Text)
       List_.Add(txt_City.Text)
       List_.Add(txt_State.Text)
       List_.Add(txt_Mobile.Text)
       List_.Add(txt_Email.Text)
       'List_.Add(GetDiagnosticsValue)
       List_.Add(cb_DoctorID.SelectedValue)
       List_.Add(txt_HospitalNumber.Text)
       List_.Add(txt_PreviousReportNumber.Text)
       List_.Add(txt_ReceivedDate.Text)
       List_.Add(txt_ReportedDate.Text)
       'List_.Add(txt_Report.Text)
       'List_.Add(txt_Notes.Text)
       If ReportImage1.SelectedImageValidity = True Then
           List_.Add(ReportImage1.SelectedName)
       Else
           List_.Add("")
       End If
       If ReportImage2.SelectedImageValidity = True Then
           List_.Add(ReportImage2.SelectedName)
       Else
           List_.Add("")
       End If
       If ReportImage3.SelectedImageValidity = True Then
           List_.Add(ReportImage3.SelectedName)
       Else
           List_.Add("")
       End If
       If ReportImage4.SelectedImageValidity = True Then
           List_.Add(ReportImage4.SelectedName)
       Else
           List_.Add("")
       End If

       Return List_.ToArray
   End Function
   Private Sub btn_OK_Click(sender As Object, e As EventArgs) Handles btn_OK.Click
       cnnOLEDB.Open()
       Dim Checkup As Object() = CheckFields()
       If Checkup(0) = True Then
           Dim im1, im2, im3, im4, emptyimg As New MemoryStream()
           My.Resources.Empty.Save(emptyimg, Imaging.ImageFormat.Bmp)
           If ReportImage1.SelectedImageValidity = True Then
               ReportImage1.SelectedImage.Save(im1, Imaging.ImageFormat.Bmp)
           End If
           If ReportImage2.SelectedImageValidity = True Then
               ReportImage2.SelectedImage.Save(im2, Imaging.ImageFormat.Bmp)
           End If
           If ReportImage3.SelectedImageValidity = True Then
               ReportImage3.SelectedImage.Save(im3, Imaging.ImageFormat.Bmp)
           End If
           If ReportImage4.SelectedImageValidity = True Then
               ReportImage4.SelectedImage.Save(im4, Imaging.ImageFormat.Bmp)
           End If
           Dim imdata1 As Byte() = im1.GetBuffer()
           Dim imdata2 As Byte() = im2.GetBuffer()
           Dim imdata3 As Byte() = im3.GetBuffer()
           Dim imdata4 As Byte() = im4.GetBuffer()
           Dim empty As Byte() = emptyimg.GetBuffer()
           cmdOLEDB.Connection = cnnOLEDB
           Dim Objects As Object() = GetDetails()
           'cmdOLEDB.CommandText = String.Format("UPDATE PATIENT SET [Report Number]='{0}',[Sur Name]='{1}',[Patient Name]='{2}',[Age]='{3}',[Gender]='{4}',[Test]='{5}',[Site]=@site,[Address Line 1]='{7}',[Address Line 2]='{8}',[City]='{9}',[State]='{10}',[Mobile]='{11}',[E Mail]='{12}',[Diagnostics]=@diag,[Doctor ID]='{14}',[Hospital Number]='{15}',[Previous Report Number]='{16}',[Received Date]='{17}',[Reported Date]='{18}',[Report Result]=@result,[Notes]=@notes,[Image 1]=@image1,[Image 1 Name]='{21}',[Image 2]=@image2,[Image 2 Name]='{22}',[Image 3]=@image3,[Image 3 Name]='{23}',[Image 4]=@image4,[Image 4 Name]='{24}' WHERE [ID]=" & PatientID & ";", Objects)
           cmdOLEDB.CommandText = String.Format("UPDATE PATIENT SET [Report Number]='{0}',[Sur Name]='{1}',[Patient Name]='{2}',[Age]='{3}',[Gender]='{4}',[Test]='{5}',[Site]=@site,[Address Line 1]='{6}',[Address Line 2]='{7}',[City]='{8}',[State]='{9}',[Mobile]='{10}',[E Mail]='{11}',[Diagnostics]=@diag,[Doctor ID]='{12}',[Hospital Number]='{13}',[Previous Report Number]='{14}',[Received Date]='{15}',[Reported Date]='{16}',[Report Result]=@result,[Notes]=@notes,[Image 1]=@image1,[Image 1 Name]='{17}',[Image 2]=@image2,[Image 2 Name]='{18}',[Image 3]=@image3,[Image 3 Name]='{19}',[Image 4]=@image4,[Image 4 Name]='{20}' WHERE [ID]=" & PatientID & ";", Objects)
           cmdOLEDB.CommandType = CommandType.Text
           Dim p4 As New OleDbParameter("@image1", OleDb.OleDbType.Binary)
           Dim p3 As New OleDbParameter("@image2", OleDb.OleDbType.Binary)
           Dim p2 As New OleDbParameter("@image3", OleDb.OleDbType.Binary)
           Dim p1 As New OleDbParameter("@image4", OleDb.OleDbType.Binary)
           Dim site As New OleDbParameter("@site", GetSiteValue())
           Dim diag As New OleDbParameter("@diag", GetDiagnosticsValue())
           Dim result As New OleDbParameter("@result", txt_Report.Text)
           Dim notes As New OleDbParameter("@notes", txt_Notes.Text)
           If ReportImage1.SelectedImageValidity = True Then
               p4.Value = imdata1
               cmdOLEDB.Parameters.Add(p4)
           Else
               p4.Value = empty
               cmdOLEDB.Parameters.Add(p4)
           End If
           If ReportImage1.SelectedImageValidity = True Then
               p3.Value = imdata2
               cmdOLEDB.Parameters.Add(p3)
           Else
               p3.Value = empty
               cmdOLEDB.Parameters.Add(p3)
           End If
           If ReportImage1.SelectedImageValidity = True Then
               p2.Value = imdata3
               cmdOLEDB.Parameters.Add(p2)
           Else
               p2.Value = empty
               cmdOLEDB.Parameters.Add(p2)
           End If
           If ReportImage1.SelectedImageValidity = True Then
               p1.Value = imdata4
               cmdOLEDB.Parameters.Add(p1)
           Else
               p1.Value = empty
               cmdOLEDB.Parameters.Add(p1)
           End If


           cmdOLEDB.Parameters.AddRange({site, diag, result, notes})
           cmdOLEDB.ExecuteNonQuery()
           MsgBox("Patient Details Successfully Updated!", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Done :-)")
           Me.DialogResult = DialogResult.OK
           Me.Close()
       Else
           MsgBox(Checkup(1), MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Error :-(")
       End If
       cnnOLEDB.Close()
   End Sub


What I have tried:

First i used String.Fomat to insert strings and integers, parameters to add binary data. It worked well until the strings contains the constants. So i choose parameters to add all informations.
Posted
Updated 29-May-16 21:54pm
Comments
Patrice T 30-May-16 4:39am    
Tell us where the error occurs.

1 solution

Your code can be simplified by rewriting
VB
If ls_Site.Items.Count > 0 Then
    For i As Integer = 0 To ls_Site.Items.Count - 1
        If i = 0 Then
            r = ls_Site.Items(0).ToString
        ElseIf i > 0 Then
            r &= ";" & ls_Site.Items(i).ToString
        End If
    Next
End If

with
VB
If ls_Site.Items.Count > 0 Then
    r = ls_Site.Items(0).ToString
    For i As Integer = 1 To ls_Site.Items.Count - 1
        r &= ";" & ls_Site.Items(i).ToString
    Next
End If


You should learn to use the debugger as soon as possible. Rather than guessing what your code is doing, It is time to see your code executing and ensuring that it does what you expect.

The debugger allow you to follow the execution line by line, inspect variables and you will see that there is a point where it stop doing what you expect.
Debugger - Wikipedia, the free encyclopedia[^]
Mastering Debugging in Visual Studio 2010 - A Beginner's Guide[^]

With the debugger, check the variables values used in the condition that fail.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900