none
vb.net对ACCESS存取图片,调试错误:“insert into”语句出错 各位给帮帮忙 RRS feed

  • 问题

  • 各位大侠,我有这样一个问题:
    我是这样写的,不过运行到dbcommand.ExecuteNonQuery()时提示错误:“insert into”语句出错
    Dim fs As System.IO.FileStream
            Dim sr As System.IO.StreamReader
            fs = New System.IO.FileStream(OpenFileDialog1.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)
            sr = New System.IO.StreamReader(fs)
            sr = New System.IO.StreamReader(OpenFileDialog1.FileName)
            Dim FileByteArray(fs.Length - 1) As Byte
            fs.Read(FileByteArray, 0, fs.Length)


            Dim dbConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\txgz.mdb;Persist Security Info=True;Jet OLEDB:Database Password=lt;"
            Dim dbConnection As OleDbConnection = New OleDbConnection(dbConnectionString)
            Dim dbcommand As System.Data.OleDb.OleDbCommand
            dbConnection.Open()
            dbcommand = New System.Data.OleDb.OleDbCommand("insert into picture(name,type,image) values(@name,@type,@image)", dbConnection)
            dbcommand.Parameters.AddWithValue("@name", "lt")
            dbcommand.Parameters.AddWithValue("@type", "jpg")
            dbcommand.Parameters.AddWithValue("@image", FileByteArray)
            dbcommand.ExecuteNonQuery()
            dbConnection.Dispose()
    帮我看看怎么回事 ,谢谢了


    昨夜西风凋碧树,独上高楼,望尽天涯路!
    2009年8月20日 8:19

答案

  • 你好, fs.Read(FileByteArray, 0, fs.Length) 是把数据流写入FileByteArray数组;

    dbcommand.Parameters.AddWithValue("@image", FileByteArray),定义一个参数,参数的值为FileByteArray。

    谢谢!
    jon.valett@gmail.com
    2009年8月21日 8:07
    版主

全部回复

  • INSERT INTO picture (name,type,image) 试试
    2009年8月20日 8:39
  • 不行,不是这个的问题,我这样写"insert into picture(name,type) values(@name,@type)"就可也把数据存入数据库中,我认为是“dbcommand.Parameters.AddWithValue("@image", FileByteArray)”这一句的问题,filebytearray这个参数的值有问题,不知道怎么解决
    昨夜西风凋碧树,独上高楼,望尽天涯路!
    2009年8月20日 8:57
  • 可能你的列 image名称和程序类型image冲突 或者 你的列的类型不支持你的数据或者超过长度

    2009年8月20日 11:07
  • 非常感谢,现在调试成功了,是image名称的问题,还有疑问请教:数组FileByteArray{length=150196},这个150196指的是什么呢?是filebytearray的字节数吗?
    byte表示8位无符号整数,数组的大小应该远超过byte类型的大小了,为什么没有出错?


    昨夜西风凋碧树,独上高楼,望尽天涯路!
    2009年8月20日 12:19
  • 你定义的FileByteArray是byte 类型的数组, 它的length 指的是数组的长度.也就是说有多少个byte

    2009年8月20日 13:17
  • 谢谢,再请教:是不是也就是说FileByteArray的长度为150196字节呢?可是byte的定义是8位无符号整数,这个是不是也指的是字节数呢??


    昨夜西风凋碧树,独上高楼,望尽天涯路!
    2009年8月20日 15:39
  • bit ....

    2009年8月21日 3:27
  • 谢谢,再请教:是不是也就是说FileByteArray的长度为150196字节呢?可是byte的定义是8位无符号整数,这个是不是也指的是字节数呢??


    昨夜西风凋碧树,独上高楼,望尽天涯路!
    你好!
         byte的定义是8位无符号整数,8位相当于一个字节
    周雪峰
    2009年8月21日 5:26
    版主
  • 谢谢,再请教:是不是也就是说FileByteArray的长度为150196字节呢?可是byte的定义是8位无符号整数,这个是不是也指的是字节数呢??


    昨夜西风凋碧树,独上高楼,望尽天涯路!
    你好!
         byte的定义是8位无符号整数,8位相当于一个字节
    周雪峰

    正确 你的数据库列类型是bit流吧 byte 正好8位 比特流8位一个字节 那么长度等于多少byte数组
    2009年8月21日 5:37
  • 谢谢,在请教:我是access数据库,存图片的列类型为OLE对象 ,那byte类型有没有字节长度限制?
    昨夜西风凋碧树,独上高楼,望尽天涯路!
    2009年8月21日 6:28
  • 谢谢,在请教:我是access数据库,存图片的列类型为OLE对象 ,那byte类型有没有字节长度限制?
    昨夜西风凋碧树,独上高楼,望尽天涯路!
    你好,byte占8位,通常数据是保存在byte数组中的,数组是没有大小限制的。
    jon.valett@gmail.com
    2009年8月21日 7:17
    版主
  • 哦,非常感谢,这两句我好看不太懂
       Dim FileByteArray(fs.Length - 1) As Byte
       fs.Read(FileByteArray, 0, fs.Length)
    可不可以这样理解:上边Dim FileByteArray(fs.Length - 1) As Byte 定义了一个长度为fs.length-1的一维数组,
     这一句: fs.Read(FileByteArray, 0, fs.Length)作何解?
    还有这个dbcommand.Parameters.AddWithValue("@image", FileByteArray),是不是在fs.Read(FileByteArray, 0, fs.Length)一句中已经把fs的字节流存入FileByteArray数组中了呢??

           
    昨夜西风凋碧树,独上高楼,望尽天涯路!
    2009年8月21日 8:03
  • 你好, fs.Read(FileByteArray, 0, fs.Length) 是把数据流写入FileByteArray数组;

    dbcommand.Parameters.AddWithValue("@image", FileByteArray),定义一个参数,参数的值为FileByteArray。

    谢谢!
    jon.valett@gmail.com
    2009年8月21日 8:07
    版主
  • 看君解答,茅塞顿开,非常感谢!
    昨夜西风凋碧树,独上高楼,望尽天涯路!
    2009年8月21日 8:47