delphi 从access数据库中读取图片

delphi 从access数据库中读取图片,第1张

你的queyr1中的查询改为这个试试

假定以前是select

from

表名,自增长列为id

SELECT

top

1

FROM

表名

ORDER

BY

Rnd(id)

分类: 电脑/网络 >> 程序设计 >> 其他编程语言

解析:

的:

private void btnUpload_Click(object sender, SystemEventArgs e)

{

得到用户要上传的文件名

string strFilePathName = loFilePostedFileFileName;

string strFileName = PathGetFileName(strFilePathName);

int FileLength = loFilePostedFileContentLength;

if(FileLength<=0)

return;

try

{上传文件

Byte[] FileByteArray = new Byte[FileLength]; 图象文件临时储存Byte数组

Stream StreamObject = loFilePostedFileInputStream; 建立数据流对像

读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度

StreamObjectRead(FileByteArray,0,FileLength);

建立SQL Server链接

string strCon = SystemConfigurationConfigurationSettingsAppSettings["DSN"];

SqlConnection Con = new SqlConnection(strCon);

String SqlCmd = "INSERT INTO ImageStore (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@Image, @ContentType, @ImageDescription, @ImageSize)";

SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);

CmdObjParametersAdd("@Image",SqlDbTypeBinary, FileLength)Value = FileByteArray;

CmdObjParametersAdd("@ContentType", SqlDbTypeVarChar,50)Value = loFilePostedFileContentType; 记录文件类型

把其它单表数据记录上传

CmdObjParametersAdd("@ImageDescription", SqlDbTypeVarChar,200)Value = tbDescriptionText;

记录文件长度,读取时使用

CmdObjParametersAdd("@ImageSize", SqlDbTypeBigInt,8)Value = FileLength;

ConOpen();

CmdObjExecuteNonQuery();

ConClose();

跳转页面

ResponseRedirect("ShowAllx");

}

catch

{

}

}

2DataGrid控件绑定数据

程序代码

private void Page_Load(object sender, SystemEventArgs e)

{

string strCon = SystemConfigurationConfigurationSettingsAppSettings["DSN"];

SqlConnection con = new SqlConnection(strCon);

SqlDataAdapter da = new SqlDataAdapter("Select from ImageStore",con);

DataSet ds = new DataSet();

daFill(ds,"image");

dgShowDataSource = dsTables["image"]DefaultView;

dgShowDataBind();

}

3显示数据库数据

程序代码

private void Page_Load(object sender, SystemEventArgs e)

{

int ImgID = ConvertToInt32(RequestQueryString["ID"]); ID为ID

建立数据库链接

string strCon = SystemConfigurationConfigurationSettingsAppSettings["DSN"];

SqlConnection Con = new SqlConnection(strCon);

String SqlCmd = "SELECT FROM ImageStore WHERE ImageID = @ImageID";

SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);

CmdObjParametersAdd("@ImageID", SqlDbTypeInt)Value = ImgID;

ConOpen();

SqlDataReader SqlReader = CmdObjExecuteReader();

SqlReaderRead();

ResponseContentType = (string)SqlReader["ImageContentType"];设定输出文件类型

输出图象文件二进制数制

ResponseOutputStreamWrite((byte[])SqlReader["ImageData"], 0, (int)SqlReader["ImageSize"]);

ResponseEnd();

也可以保存为图像

FileStream fs = new FileStream(@"C:\aaBMP", FileModeOpenOrCreate, FileAccessWrite);

fsWrite((byte[])SqlReader["ImageData"], 0,(int)SqlReader["ImageSize"]);

fsClose();

ConClose();

}

asp的:

ASP存入数据库源程序

写到数据库:<%

responsebuffer=true

formsize=requesttotalbytes

formdata=requestbinaryread(formsize)

bncrlf=chrB(13) & chrB(10)

divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)

datastart=instrb(formdata,bncrlf & bncrlf)+4

dataend=instrb(datastart+1,formdata,divider)-datastart

mydata=midb(formdata,datastart,dataend)

Dim Conn

Set Conn=ServerCreateObject("adodbconnection")

ConnOpen strConn

set rec=servercreateobject("ADODBrecordset")

recOpen "SELECT FROM images order by id desc",Conn,1,3

recaddnew

rec("images")appendchunk mydata

recupdate

recclose

set rec=nothing

set connGraph=nothing

%>

从数据库读:

<%

Dim Conn

Set Conn=ServerCreateObject("adodbconnection")

ConnOpen strConn

set rec=servercreateobject("ADODBrecordset")

strsql="select images from images where id=" & trim(request("id"))

recopen strsql,Conn,1,1

ResponseContentType = "img/"

ResponseBinaryWrite rec("images")getChunk(7500000)

%>

注:存数据库是以二进制存的,在读写时文本和只能分开保存。

用SqlDataReader读取数据,放到流中,Image对象从流加载数据到PictureBox。有三种方式读取,这三种方式都要求将SqlDataReader的默认行为设置为SequentialAccess。

1使用GetSqlBytes检索varbinary(max)数据:

using (SqlConnection connection = new SqlConnection(ConnectionString))

{

Stream s = new MemoryStream(); //创建一个以内存为后备存储的流

SqlCommand command = connectionCreateCommand();

SqlDataReader reader = null;

try

{

commandCommandText = "SELECT LastName,Photo FROM dboEmployees " +

" WHERE LastName=@LastName";

commandCommandType = CommandTypeText;

//声明参数并赋值

SqlParameter parameter = new SqlParameter("@LastName", SqlDbTypeNVarChar, 20);

parameterValue = lastName;

commandParametersAdd(parameter);

connectionOpen();

//修改DataReader的默认行为,SequentialAccess按顺序接收数据并立即加载

//CloseConnection指明关闭DataReader时,对数据库的连接也关闭

reader = commandExecuteReader(

CommandBehaviorSequentialAccess|CommandBehaviorCloseConnection);

if (readerHasRows)

{

while (readerRead())

{

//SequentialAccess要求按顺序接收数据,先接受reader[0]

thislabel1Text = reader[0]ToString();

if (readerIsDBNull(1)) //若列值为空返回

return;

else

{

//使用readerGetSqlBytes获取图像数据

SqlBytes bytes = readerGetSqlBytes(1);

using (Bitmap productImage = new Bitmap(bytesStream))

{

//以gif格式保存在Stream流并显示

productImageSave(s, SystemDrawingImagingImageFormatGif);

thispictureBox1Image = SystemDrawingImageFromStream(s);

} } }

}

else

MessageBoxShow("No records returned");

2使用GetSqlBinary检索数据:

reader = commandExecuteReader(CommandBehaviorCloseConnection);

while (readerRead())

SqlBinary binaryStream = readerGetSqlBinary(0);

3使用GetValue检索数据:

while (readerRead())

{

//如果从 varbinary(max) 列读数据

byte[] binaryData = (byte[])readerGetValue(0);

//如果从 varchar(max)或nvarchar(max) 列读数据

String stringData = (String)readerGetValue(1);

}

详细代码见我的“王一博客”danyaody

输出就行啦你现在会不会输出该字段的其它内容就如输出ID字段会吗?

输出ID字段的方法:

<%=rs("id")%>

那么你输出的字段呢

<%=rs("image")%>

当然你说只输出了字段的内容为什么不会显示该呢当然,你要加上一些HTML的标签语言才行方法:

<img src="<%=rs("image")%>">

这样就可以输出的字段了,并且能显示 试一试吧

读出二进制,转化成流,然后write到页面上 byte[] blob = userinfogetPhoto(); if(blob!=null){ responsereset(); responsesetContentType("image/"+dat);

以上就是关于delphi 从access数据库中读取图片全部的内容,包括:delphi 从access数据库中读取图片、如何向sql数据库中存取照片、如何从数据库中读取图片到picturebox中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9273986.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存