从访问中检索图像并在vb中的datagrid中显示 [英] retrieve image from access and display in datagrid in vb
问题描述
我正在一个简单的程序上工作,该程序将从我的.mdb中检索数据并在窗体上的datagrid中显示所有图像都显示良好,除非从图像中有人可以告诉我什么是将图像存储在Access Database 2007 OLE对象中并插入文件的正确格式并使用链接原因当我这样做时,我在数据库表中看不到我的图像,它通过我放置的图像是.bmp的方式显示包,这似乎可以正常工作.也在我的数据网格的vb中将我的列设置为我运行应用程序时出现DataGridViewImageColumn,我得到了system.AgumentExeption:parameter无效以及其他内容.
但是,如果我将列设置为DataGridViewTextBoxColumn,则不会出现任何错误,但会在该列中插入图片,但会得到(Byte [] Array)
希望有人可以提供帮助.
您在Access 2007中创建数据库,然后以word2003格式保存.
我的表结构是:-
Id自动编号
标题文字
SaveImage OleObject
说明备忘录
日期Datetime
上表中的名称为Image1
为了保存图像,我创建一个Default.aspx页面
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <table width="100%"> <tr> <td> <table width="100%"> <tr> <td style="width: 30%"> <asp:HyperLink ID="HyperLink19" runat="server" NavigateUrl="~/crtUser.aspx">Create User</asp:HyperLink></td> <td style="width: 30%"> </td> <td style="width: 30%"> <asp:LinkButton ID="LinkButton1" runat="server" ValidationGroup="log">Logout</asp:LinkButton></td> </tr> </table> </td> </tr> <tr> <td> <asp:Panel ID="Panel1" runat="server" Width="100%"> <table> <tr> <td colspan="3"> Add Image </td> </tr> <tr> <td> Title:</td> <td> <asp:TextBox ID="TextBox1" runat="server" MaxLength="100"></asp:TextBox></td> <td> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="Enter the Image Title"></asp:RequiredFieldValidator></td> </tr> <tr> <td> Image Upload: </td> <td> <asp:FileUpload ID="FileUpload1" runat="server" /></td> <td> </td> </tr> <tr> <td> Description:</td> <td> <asp:TextBox ID="TextBox2" runat="server" MaxLength="100" TextMode="MultiLine" Width="100%"></asp:TextBox></td> <td> </td> </tr> <tr> <td colspan="3"> <asp:Button ID="Button1" runat="server" Font-Bold="True" Text="Save" Width="121px" /> <asp:Button ID="Button2" runat="server" Text="Delete" ValidationGroup="Del" Width="79px" /></td> </tr> </table> </asp:Panel> </td> </tr> <tr> <td> <asp:Label ID="Label1" runat="server" Text="Some problem in this page."></asp:Label> </td> </tr> <tr> <td> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Image.aspx">Go to Image Gallery</asp:HyperLink> </td> </tr> </table> </div> </form> </body> </html>
现在,Default.aspx.vb页面编写代码
Partial Class _Default Inherits System.Web.UI.Page Dim con As OleDbConnection Dim ds As DataSet1 Dim adapter1 As OleDbDataAdapter Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Try If FileUpload1.HasFile = True Then Dim fileData As Byte() = New Byte(FileUpload1.PostedFile.InputStream.Length) {} FileUpload1.PostedFile.InputStream.Read(fileData, 0, fileData.Length) adapter1 = New OleDbDataAdapter("Select * from ImageSave1", con) Dim cmdbuilder As New OleDbCommandBuilder(adapter1) ds = New DataSet1() adapter1.Fill(ds.Tables(0)) Dim row As DataRow = ds.Tables(0).Rows.Find(Request.QueryString("ID")) row.BeginEdit() row("Title") = TextBox1.Text.Trim() row("Description") = TextBox2.Text.Trim() row("date1") = Date.Now() row("saveImage") = fileData row.EndEdit() adapter1.Update(ds.Tables(0)) Response.Write("Update successfully") TextBox1.Text = "" TextBox2.Text = "" Else adapter1 = New OleDbDataAdapter("Select * from ImageSave1", con) Dim cmdbuilder As New OleDbCommandBuilder(adapter1) ds = New DataSet1() adapter1.Fill(ds.Tables(0)) Dim row As DataRow = ds.Tables(0).Rows.Find(Request.QueryString("ID")) row.BeginEdit() row("Title") = TextBox1.Text.Trim() row("Description") = TextBox2.Text.Trim() row("date1") = Date.Now() row.EndEdit() adapter1.Update(ds.Tables(0)) Response.Write("Update successfully") TextBox1.Text = "" TextBox2.Text = "" End If Catch End Try End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load con = New OleDbConnection(ConfigurationManager.ConnectionStrings("ImgGallery").ToString()) If Not Page.IsPostBack Then If Request.QueryString("ID") Is Nothing Then Panel1.Visible = False Label1.Visible = True Else Panel1.Visible = True Label1.Visible = False adapter1 = New OleDbDataAdapter("Select * from ImageSave where ID=" & Request.QueryString("ID"), con) Dim cmdbuilder As New OleDbCommandBuilder(adapter1) ds = New DataSet1() adapter1.Fill(ds.Tables(0)) TextBox1.Text = ds.Tables(0).Rows(0)("Title").ToString() TextBox2.Text = ds.Tables(0).Rows(0)("Description").ToString() End If End If End Sub Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click adapter1 = New OleDbDataAdapter("Select * from ImageSave", con) Dim cmdbuilder As New OleDbCommandBuilder(adapter1) ds = New DataSet1() adapter1.Fill(ds.Tables(0)) Dim row As DataRow = ds.Tables(0).Rows.Find(Request.QueryString("ID")) row.BeginEdit() row("Title") = "Image" + Request.QueryString("ID") row("Description") = Nothing row("date1") = Date.Now() row("saveImage") = Nothing row.EndEdit() adapter1.Update(ds.Tables(0)) Response.Write("Delete successfully") TextBox1.Text = "" TextBox2.Text = "" End Sub Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit If Session("user") = "" Or Session("user") Is Nothing Then HyperLink19.Visible = False LinkButton1.Visible = False Session("user") = "" Response.Redirect("login.aspx") End If End Sub Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton1.Click Session.Abandon() Session("user") = "" Response.Redirect("~/login.aspx") End Sub End Class
现在,对于显示图像,我创建用户控件名称为Image.ascx
<%@ 控制 语言 =" VB" AutoEventWireup false" CodeFile =" 继承 >图片" %> < asp:DataList ID =" runat 服务器" RepeatColumns 4" 宽度 > 100%" =" 水平" > ; < HeaderTemplate > < 表 =" 单元格间距 2" 宽度 =" 100%" 样式 text-align:center;" < tr > < /HeaderTemplate > < ItemTemplate > < td =" top" 宽度 > 25%" 高度 =" 92px" ">> < asp:Image ID =" runat 服务器" 宽度 108像素" 高度 91px" ImageUrl =' <%#" + DataBinder.Eval(Container.DataItem, ID" ).ToString()%> ' / > < br > <%#DataBinder.Eval(Container.DataItem," 说明" )%> < br / < =" 颜色:#0000FF;" href =' <%#" VwFull.aspx?vID =" + DataBinder.Eval(Container.DataItem, ).Tostring()%> ' 形状 =" 校正" < /a > < hr > < /ItemTemplate > < SeparatorTemplate > < /td > < /SeparatorTemplate > < FooterTemplate > < /table > < /FooterTemplate > < /asp:DataList > < br > < asp:LinkButton ForeColor =" ID =" runat 服务器" < /asp:LinkButton >
现在Image.ascx.vb是
<pre lang="vb">Partial Class Image Inherits System.Web.UI.UserControl Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load End Sub Public Sub Display(ByVal source As PagedDataSource) source.AllowPaging = True source.PageSize = 16 Dim current As Integer = 1 If Not Request.QueryString("page") = Nothing Then current = Integer.Parse(Request.QueryString("page")) Else current = 1 End If source.CurrentPageIndex = current - 1 DataList1.DataSource = source DataList1.DataBind() If source.PageCount > 1 Then For i As Integer = 1 To source.PageCount LinkButton1.Text += " " & "<a style=''color: black;'' href=Image.aspx?page=" & i.ToString() & ">" & i.ToString() & "</a> " Next i End If End Sub End Class
现在,在上面的控件中拖放到Image.aspx页面中:-
<%@ 页面 语言 =" VB" MasterPageFile 〜/MasterPage.master" =" false" CodeFile =" Image.aspx.vb" 继承 =" 标题 =" 图片库" ViewStateEncryptionMode 自动" % > <%@ 注册 Src =" TagName =" TagPrefix %> < asp:Content ContentPlaceHolderID =" ID Content1 " runat 服务器" < uc1:Image ID =" runat 服务器" / < /asp:Content >
现在Image.aspx.vb是
<pre lang="vb">Partial Class image_data_ Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim Page As New PagedDataSource() Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("ImgGallery").ToString()) Dim adapter As New SqlDataAdapter("Select * from ImageSave1", con) Dim ds As New DataSet() adapter.Fill(ds) Page.DataSource = ds.Tables(0).DefaultView Image1.Display(Page) End Sub End Class
现在我在绘制图像的地方添加DrawImg.aspx:-
<%@ 页面 语言 =" VB" MasterPageFile 〜/MasterPage.master" AutoEventWireup false" CodeFile DrawImg.aspx .vb" 继承 DrawImg" 标题 =" %> < asp:Content ID =" ContentPlaceHolderID ContentPlaceHolder1 " runat 服务器" < /asp:Content >
现在DrawImg.aspx.vb页面代码为:-
Imports System.IO Partial Class DrawImg Inherits System.Web.UI.Page Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("ImgGallery").ToString()) Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Request.QueryString("id") <> Nothing Then Try ''Dim myFile As File = Nothing Dim a As Byte() Dim myCommand As SqlCommand = New SqlCommand("Select * from ImageSave1 where ID=" + Request.QueryString("id"), con) con.Open() Using myReader As SqlDataReader = myCommand.ExecuteReader() If myReader.Read() Then a = DirectCast(myReader(myReader.GetOrdinal("saveThumb")), Byte()) End If myReader.Close() End Using Response.ContentType = "Image/jpeg" Response.BinaryWrite(a) Catch End Try End If End Sub End Class
我希望工作顺利.
感谢您的重放,但是您显示给我的是vb.net/asp,您在网页上显示图像还是什么?
我的datagridview在Windows上.我在.mdb中已经有一个包含图像的表,还有一个具有数据绑定的组合框,该组合框将查询我的数据库并在datagrid中显示结果.
因此,我只需要知道使用哪种格式来设置表中的列,以及如何使用Visual Basic 2008 Express Edition在Windows form.im的datagrid的图像列中填充图像.
hi
im working on a simple program that will retrieve data from my .mdb and display in datagrid on my form all is showing well except from image can anybody tell me what is the right format to store image in access database 2007 OLE object and insert the file and use link cause when i do that i dont see my image in the db table it show package by the way the image i''ve put is .bmp which suppose to work.also in vb in my data grid it set my column as DataGridViewImageColumn when i run the app i get system.AgumentExeption:parameter is not valid plus other stuff.
but if i set the colum as DataGridViewTextBoxColumn i dont get any error but insted of a picture in that column i get (Byte[] Array)
hope someone can help
You create database in access 2007 then save in word2003 format.
My table structure is:-
Id AutoNumber
Title Text
SaveImage OleObject
Description Memo
Date Datetime
In above table name is Image1
For image save i create a Default.aspx page
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <table width="100%"> <tr> <td> <table width="100%"> <tr> <td style="width: 30%"> <asp:HyperLink ID="HyperLink19" runat="server" NavigateUrl="~/crtUser.aspx">Create User</asp:HyperLink></td> <td style="width: 30%"> </td> <td style="width: 30%"> <asp:LinkButton ID="LinkButton1" runat="server" ValidationGroup="log">Logout</asp:LinkButton></td> </tr> </table> </td> </tr> <tr> <td> <asp:Panel ID="Panel1" runat="server" Width="100%"> <table> <tr> <td colspan="3"> Add Image </td> </tr> <tr> <td> Title:</td> <td> <asp:TextBox ID="TextBox1" runat="server" MaxLength="100"></asp:TextBox></td> <td> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="Enter the Image Title"></asp:RequiredFieldValidator></td> </tr> <tr> <td> Image Upload: </td> <td> <asp:FileUpload ID="FileUpload1" runat="server" /></td> <td> </td> </tr> <tr> <td> Description:</td> <td> <asp:TextBox ID="TextBox2" runat="server" MaxLength="100" TextMode="MultiLine" Width="100%"></asp:TextBox></td> <td> </td> </tr> <tr> <td colspan="3"> <asp:Button ID="Button1" runat="server" Font-Bold="True" Text="Save" Width="121px" /> <asp:Button ID="Button2" runat="server" Text="Delete" ValidationGroup="Del" Width="79px" /></td> </tr> </table> </asp:Panel> </td> </tr> <tr> <td> <asp:Label ID="Label1" runat="server" Text="Some problem in this page."></asp:Label> </td> </tr> <tr> <td> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Image.aspx">Go to Image Gallery</asp:HyperLink> </td> </tr> </table> </div> </form> </body> </html>
Now Default.aspx.vb page write code
Partial Class _Default Inherits System.Web.UI.Page Dim con As OleDbConnection Dim ds As DataSet1 Dim adapter1 As OleDbDataAdapter Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Try If FileUpload1.HasFile = True Then Dim fileData As Byte() = New Byte(FileUpload1.PostedFile.InputStream.Length) {} FileUpload1.PostedFile.InputStream.Read(fileData, 0, fileData.Length) adapter1 = New OleDbDataAdapter("Select * from ImageSave1", con) Dim cmdbuilder As New OleDbCommandBuilder(adapter1) ds = New DataSet1() adapter1.Fill(ds.Tables(0)) Dim row As DataRow = ds.Tables(0).Rows.Find(Request.QueryString("ID")) row.BeginEdit() row("Title") = TextBox1.Text.Trim() row("Description") = TextBox2.Text.Trim() row("date1") = Date.Now() row("saveImage") = fileData row.EndEdit() adapter1.Update(ds.Tables(0)) Response.Write("Update successfully") TextBox1.Text = "" TextBox2.Text = "" Else adapter1 = New OleDbDataAdapter("Select * from ImageSave1", con) Dim cmdbuilder As New OleDbCommandBuilder(adapter1) ds = New DataSet1() adapter1.Fill(ds.Tables(0)) Dim row As DataRow = ds.Tables(0).Rows.Find(Request.QueryString("ID")) row.BeginEdit() row("Title") = TextBox1.Text.Trim() row("Description") = TextBox2.Text.Trim() row("date1") = Date.Now() row.EndEdit() adapter1.Update(ds.Tables(0)) Response.Write("Update successfully") TextBox1.Text = "" TextBox2.Text = "" End If Catch End Try End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load con = New OleDbConnection(ConfigurationManager.ConnectionStrings("ImgGallery").ToString()) If Not Page.IsPostBack Then If Request.QueryString("ID") Is Nothing Then Panel1.Visible = False Label1.Visible = True Else Panel1.Visible = True Label1.Visible = False adapter1 = New OleDbDataAdapter("Select * from ImageSave where ID=" & Request.QueryString("ID"), con) Dim cmdbuilder As New OleDbCommandBuilder(adapter1) ds = New DataSet1() adapter1.Fill(ds.Tables(0)) TextBox1.Text = ds.Tables(0).Rows(0)("Title").ToString() TextBox2.Text = ds.Tables(0).Rows(0)("Description").ToString() End If End If End Sub Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click adapter1 = New OleDbDataAdapter("Select * from ImageSave", con) Dim cmdbuilder As New OleDbCommandBuilder(adapter1) ds = New DataSet1() adapter1.Fill(ds.Tables(0)) Dim row As DataRow = ds.Tables(0).Rows.Find(Request.QueryString("ID")) row.BeginEdit() row("Title") = "Image" + Request.QueryString("ID") row("Description") = Nothing row("date1") = Date.Now() row("saveImage") = Nothing row.EndEdit() adapter1.Update(ds.Tables(0)) Response.Write("Delete successfully") TextBox1.Text = "" TextBox2.Text = "" End Sub Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit If Session("user") = "" Or Session("user") Is Nothing Then HyperLink19.Visible = False LinkButton1.Visible = False Session("user") = "" Response.Redirect("login.aspx") End If End Sub Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton1.Click Session.Abandon() Session("user") = "" Response.Redirect("~/login.aspx") End Sub End Class
Now For Display Image i create the user control name is Image.ascx
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="Image.ascx.vb" Inherits="Image" %> <asp:DataList ID="DataList1" runat="server" RepeatColumns="4" Width="100%" RepeatDirection="Horizontal"> <HeaderTemplate> <table cols="4" cellspacing="2" width="100%" style="text-align:center;"> <tr> </HeaderTemplate> <ItemTemplate> <td valign="top" width="25%" Height="92px" > <asp:Image ID="Image1" runat="server" Width="108px" Height="91px" ImageUrl= '<%# "~/DrawImg.aspx?id="+ DataBinder.Eval(Container.DataItem,"ID").ToString() %>' /> <br /> <%#DataBinder.Eval(Container.DataItem, "Description")%> <br /> <a style="color:#0000FF;" href='<%# "VwFull.aspx?vID="+ DataBinder.Eval(Container.DataItem,"ID").Tostring() %>' shape="rect">View full size</a> <hr /> </ItemTemplate> <SeparatorTemplate> </td> </SeparatorTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:DataList> <br /> <asp:LinkButton ForeColor="#0000FF" ID="LinkButton1" runat="server"></asp:LinkButton>
Now Image.ascx.vb is
<pre lang="vb">Partial Class Image Inherits System.Web.UI.UserControl Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load End Sub Public Sub Display(ByVal source As PagedDataSource) source.AllowPaging = True source.PageSize = 16 Dim current As Integer = 1 If Not Request.QueryString("page") = Nothing Then current = Integer.Parse(Request.QueryString("page")) Else current = 1 End If source.CurrentPageIndex = current - 1 DataList1.DataSource = source DataList1.DataBind() If source.PageCount > 1 Then For i As Integer = 1 To source.PageCount LinkButton1.Text += " " & "<a style=''color: black;'' href=Image.aspx?page=" & i.ToString() & ">" & i.ToString() & "</a> " Next i End If End Sub End Class
Now in above control is drag and drop in Image.aspx page:-
<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Image.aspx.vb" Inherits="image_data_" Title="Image Gallary" ViewStateEncryptionMode="Auto" %> <%@ Register Src="~/Control/Image.ascx"TagName="Image" TagPrefix="uc1" %> <asp:Content ContentPlaceHolderID="ContentPlaceHolder1" ID="Content1" runat="server"> <uc1:Image ID="Image1" runat="server" /> </asp:Content>
Now Image.aspx.vb is
<pre lang="vb">Partial Class image_data_ Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim Page As New PagedDataSource() Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("ImgGallery").ToString()) Dim adapter As New SqlDataAdapter("Select * from ImageSave1", con) Dim ds As New DataSet() adapter.Fill(ds) Page.DataSource = ds.Tables(0).DefaultView Image1.Display(Page) End Sub End Class
Now i am add DrawImg.aspx where image is drawing:-
<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="DrawImg.aspx.vb" Inherits="DrawImg" Title="View Image" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> </asp:Content>
Now DrawImg.aspx.vb page code is:-
Imports System.IO Partial Class DrawImg Inherits System.Web.UI.Page Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("ImgGallery").ToString()) Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Request.QueryString("id") <> Nothing Then Try ''Dim myFile As File = Nothing Dim a As Byte() Dim myCommand As SqlCommand = New SqlCommand("Select * from ImageSave1 where ID=" + Request.QueryString("id"), con) con.Open() Using myReader As SqlDataReader = myCommand.ExecuteReader() If myReader.Read() Then a = DirectCast(myReader(myReader.GetOrdinal("saveThumb")), Byte()) End If myReader.Close() End Using Response.ContentType = "Image/jpeg" Response.BinaryWrite(a) Catch End Try End If End Sub End Class
I hope work successfully.
thanks for the replay but what you showing me is for vb.net/asp right you showing the image on a webpage or something?
my datagridview is on windows from. i already have a table in my .mdb which contain the image and also a combo box that has data binding which will query my db and display result in the datagrid.
so i just need to know what format to set the column in my table and and how to make the image populate in the image column in my datagrid on my windows form.im using visual basic 2008 express edition.
这篇关于从访问中检索图像并在vb中的datagrid中显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!