如何在ms access和vb.net中保存图像

如何在ms access和vb.net中保存图像,vb.net,ms-access,Vb.net,Ms Access,大家好,有谁能帮我在ms access和vb.net中保存图像吗?它一直在说标准表达式中的数据类型不匹配,顺便说一下,这是我的源代码 Dim ms As New System.IO.MemoryStream Dim bmpImage As New Bitmap(PHOTOPictureBox.Image) Try bmpImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg) bytImage = ms.ToArray()

大家好,有谁能帮我在ms access和vb.net中保存图像吗?它一直在说标准表达式中的数据类型不匹配,顺便说一下,这是我的源代码

Dim ms As New System.IO.MemoryStream
Dim bmpImage As New Bitmap(PHOTOPictureBox.Image)
Try 
   bmpImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
   bytImage = ms.ToArray()
   ms.Close()
Catch ex As Exception
   MsgBox(ex.Message)
End Try
strsql = "insert into request (FIRSTNAME, MIDDLENAME, LASTNAME, QLFR, ALIAS, DATEOFBIRTH, AGE, PLACEOFBIRTH, BARANGAY, TOWN, PROVINCE, GENDER, CIVILSTATUS, CITIZENSHIP, CONTACTNUMBER, PHOTO)values(@a0,@a1,@a2,@a3,@a4,@a5,@a6,@a7,@a8,@a9,@a10,@a11,@a12,@a13,@14,@a15)"
acscmd.CommandText = strsql
acscmd.Connection = acsconn
acscmd.Parameters.AddWithValue("@a0", FIRSTNAMETextBox.Text)
acscmd.Parameters.AddWithValue("@a1", MIDDLENAMETextBox.Text)
acscmd.Parameters.AddWithValue("@a2", LASTNAMETextBox.Text)
acscmd.Parameters.AddWithValue("@a3", QLFRComboBox.SelectedItem)
acscmd.Parameters.AddWithValue("@a4", ALIASTextBox.Text)
acscmd.Parameters.AddWithValue("@a5", DATEOFBIRTHDateTimePicker.Text)
acscmd.Parameters.AddWithValue("@a6", AGETextBox.Text)
acscmd.Parameters.AddWithValue("@a7", PLACEOFBIRTHTextBox.Text)
acscmd.Parameters.AddWithValue("@a8", BARANGAYComboBox.SelectedItem)
acscmd.Parameters.AddWithValue("@a9", TOWNTextBox.Text)
acscmd.Parameters.AddWithValue("@a10", PROVINCETextBox.Text)
acscmd.Parameters.AddWithValue("@a11", GENDERComboBox.SelectedItem)
acscmd.Parameters.AddWithValue("@a12", CIVILSTATUSComboBox.SelectedItem)
acscmd.Parameters.AddWithValue("@a13", CITIZENSHIPTextBox.Text)
acscmd.Parameters.AddWithValue("@a14", CONTACTNUMBERTextBox.Text)
acscmd.Parameters.AddWithValue("@a15", bytImage)
acscmd.ExecuteNonQuery()
acscmd.Dispose()
MsgBox("ADDED")
print.Show()

分配第14个参数时有一个小错误。您在其中遗漏了
a
。它可能对您有帮助,也可能没有帮助,因为您对第15个参数有问题

请您确认一下,您已按时间申报如下

Dim bytImage() As Byte
Dim ms As New System.IO.MemoryStream
Dim bmpImage As New Bitmap(PHOTOPictureBox.Image)
Try 
   bmpImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
   bytImage = ms.ToArray()
   ms.Close()
Catch ex As Exception
   MsgBox(ex.Message)
End Try
strsql = "insert into request (FIRSTNAME, MIDDLENAME, LASTNAME, QLFR, ALIAS, DATEOFBIRTH, AGE, PLACEOFBIRTH, BARANGAY, TOWN, PROVINCE, GENDER, CIVILSTATUS, CITIZENSHIP, CONTACTNUMBER, PHOTO)values(@a0,@a1,@a2,@a3,@a4,@a5,@a6,@a7,@a8,@a9,@a10,@a11,@a12,@a13,@a14,@a15)"
acscmd.CommandText = strsql
acscmd.Connection = acsconn
acscmd.Parameters.AddWithValue("@a0", FIRSTNAMETextBox.Text)
acscmd.Parameters.AddWithValue("@a1", MIDDLENAMETextBox.Text)
acscmd.Parameters.AddWithValue("@a2", LASTNAMETextBox.Text)
acscmd.Parameters.AddWithValue("@a3", QLFRComboBox.SelectedItem)
acscmd.Parameters.AddWithValue("@a4", ALIASTextBox.Text)
acscmd.Parameters.AddWithValue("@a5", DATEOFBIRTHDateTimePicker.Text)
acscmd.Parameters.AddWithValue("@a6", AGETextBox.Text)
acscmd.Parameters.AddWithValue("@a7", PLACEOFBIRTHTextBox.Text)
acscmd.Parameters.AddWithValue("@a8", BARANGAYComboBox.SelectedItem)
acscmd.Parameters.AddWithValue("@a9", TOWNTextBox.Text)
acscmd.Parameters.AddWithValue("@a10", PROVINCETextBox.Text)
acscmd.Parameters.AddWithValue("@a11", GENDERComboBox.SelectedItem)
acscmd.Parameters.AddWithValue("@a12", CIVILSTATUSComboBox.SelectedItem)
acscmd.Parameters.AddWithValue("@a13", CITIZENSHIPTextBox.Text)
acscmd.Parameters.AddWithValue("@a14", CONTACTNUMBERTextBox.Text)
acscmd.Parameters.AddWithValue("@a15", bytImage)
acscmd.ExecuteNonQuery()
acscmd.Dispose()
MsgBox("ADDED")
print.Show()

我看不出您的代码有任何错误,但我只是在现有的测试MDB数据库中添加了一个OLE对象列,并运行了下面的代码和保存的记录,没有问题:

Imports System.Data.OleDb
Imports System.IO

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Using ofd As New OpenFileDialog
            If ofd.ShowDialog() = DialogResult.OK Then
                PictureBox1.ImageLocation = ofd.FileName
            End If
        End Using
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim pictureData As Byte()

        Using ms As New MemoryStream
            PictureBox1.Image.Save(ms, Imaging.ImageFormat.Jpeg)
            pictureData = ms.ToArray()
        End Using

        Using connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""|DataDirectory|\Database2.mdb"";Persist Security Info=True"),
            command As New OleDbCommand("INSERT INTO Person (FullName, DateOfBirth, Picture) VALUES (@FullName, @DateOfBirth, @Picture)",
                                        connection)
            With command.Parameters
                .AddWithValue("@FullName", TextBox1.Text)
                .AddWithValue("@DateOfBirth", DateTimePicker1.Value.Date)
                .AddWithValue("@Picture", pictureData)
            End With

            connection.Open()
            command.ExecuteNonQuery()
        End Using
    End Sub
End Class

我建议重新编写代码并按照我的格式进行,看看问题是否消失。

您在MS AccessOLE对象中为photo创建了什么数据类型,但我不知道为什么它一直在标准表达式vb中说数据类型不匹配。NET您能发布准确的错误和完整的CodeOledBeException Unhandleddatatype不匹配吗在条件表达式中,当我单击“保存”按钮时,我认为这实际上不会有什么不同,因为参数是位置参数,而不是为访问命名的。如果这是问题所在,则会出现另一条错误消息。我已经在公共类formit中将dim bytimage()声明为byte,它说变量bytimage在赋值之前就已经被使用了,这将导致运行时错误