这是我的初级程序员外部人员
我正在尝试从我的数据库中显示图像,但是当我尝试提取文件时,它只包含6个字节的数据,导致我的程序抛出错误。我的导师告诉我,文件对于图像而言太小,导致我相信我没有正确存储它。如果有人能够识别可能导致这种情况发生的任何代码,我将是最亲切的。
这是我的函数抓取/存储文件
Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click
Dim _image As Byte()
_image = FileUpload1.FileBytes
Dim conn As New SqlConnection
Dim cmd As New SqlCommand
Dim dr As SqlDataReader
conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
cmd.Connection = conn
cmd.CommandText = "Insert INTO mrg_Image(Image, UserId) VALUES('@image', @id)"
cmd.Parameters.AddWithValue("@image", FileUpload1.FileBytes)
cmd.Parameters.AddWithValue("@id", 4)
conn.Open()
dr = cmd.ExecuteReader
conn.Close()
'FileUpload1.SaveAs()
End Sub
conn.Open()
file_bytes是包含6个字节的变量,与图像应该具有的一千个+相对
Dim file_bytes As Byte() = cmd.ExecuteScalar()
Dim file_bytes_memory_stream As New System.IO.MemoryStream(file_bytes)
Dim file_bytes_stream As System.IO.Stream = DirectCast(file_bytes_memory_stream, System.IO.Stream)
Dim the_image As New System.Drawing.Bitmap(file_bytes_stream)
context.Response.ContentType = "image/jpg"
the_image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)
conn.Close()
End Sub
答案 0 :(得分:0)
试试这个
cmd.CommandText = "Insert INTO mrg_Image(Image, UserId) VALUES(@image, @id)"
cmd.Parameters.Add("@image", SqlDbType.Image)
cmd.Parameters("@image") = FileUpload1.FileBytes
cmd.Parameters.AddWithValue("@id", 4)
修改强> 删除了“;”忘了这是vb
<强> EDIT2 强> 变成 ()。再次忘记了我的VB
答案 1 :(得分:0)
尝试用@image替换'@image'。
还用ExecuteNonQuery替换ExecuteReader。
我不知道FileBytes属性,我总是这么做......
Dim _image(FileUpload1.PostedFile.InputStream.Length)As Byte FileUpload1.PostedFile.InputStream.Read(_image,0,_image.Length)