如果将image字段数据转换成二进制

Changefish 2008-12-29 06:00:56
image字段用16进制存储数据,想转成二进制的字符串,该怎么转?谢谢
...全文
177 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2008-12-30
  • 打赏
  • 举报
回复
以下为16进制转10进制的函数,自己参考一下,然后更改.
CREATE FUNCTION dbo.f_hex_dec(@s varchar(16))
RETURNS bigint
AS
BEGIN
--作者:pbsql
--参数不得含'0'~'9'、'a'~'f'、'A'~'F'之外的任意字符(首尾空格除外),否则返回0
DECLARE @i int,@result bigint
SELECT @i=0,@result=0,@s=RTRIM(LTRIM(UPPER(REVERSE(@s))))
WHILE @i<LEN(@s)
BEGIN
IF SUBSTRING(@s,@i+1,1) not between '0' and '9' and SUBSTRING(@s,@i+1,1) not between 'A' and 'F'
BEGIN
SELECT @result=0
break
END
SELECT @result=@result+(CHARINDEX(SUBSTRING(@s,@i+1,1),'0123456789ABCDEF')-1)*POWER(16,@i),@i=@i+1
END
RETURN @result
END
GO
dawugui 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 Changefish 的帖子:]
image字段用16进制存储数据,想转成二进制的字符串,该怎么转?谢谢
[/Quote]
16进制中如果含有2,3,...,a,b,c,d,e,f,不能转换为2进制.
wsh236 2008-12-30
  • 打赏
  • 举报
回复
能不能先转化成text 然后在转化成二进制
/*--示例说明:
下面的代码演示了转换pubs数据库的pub_info表中的pr_info列(text类型)为image类型
及将转换结果再转换为text的处理。
--*/
USE pubs

--创建一个临时表,用来转换 pub_info.pr_info 列值
CREATE TABLE #t(id int,a image,b text)
GO

--将 pub_info.pr_info 转换到 #t.a 列中
DECLARE @id int,@ps binary(16),@pd binary(16)
DECLARE tb CURSOR LOCAL
FOR
SELECT pub_id,TEXTPTR(pr_info) FROM pub_info
WHERE TEXTVALID('pub_info.pr_info',TEXTPTR(pr_info))=1
OPEN tb
FETCH tb INTO @id,@ps
WHILE @@FETCH_STATUS=0
BEGIN
INSERT #t VALUES(@id,0x,'')
SELECT @pd=TEXTPTR(a) FROM #t
WHERE TEXTVALID('#t.a',TEXTPTR(a))=1
IF @@ROWCOUNT>0
UPDATETEXT #t.a @pd 0 NULL pub_info.pr_info @ps
FETCH tb INTO @id,@ps
END
CLOSE tb
DEALLOCATE tb
GO

--将 #t.a 转换到 #t.b 列中
DECLARE @ps binary(16),@pd binary(16)
DECLARE tb CURSOR LOCAL
FOR
SELECT TEXTPTR(a),TEXTPTR(b) FROM #t
WHERE TEXTVALID('#t.a',TEXTPTR(a))=1
AND TEXTVALID('#t.b',TEXTPTR(b))=1
OPEN tb
FETCH tb INTO @ps,@pd
WHILE @@FETCH_STATUS=0
BEGIN
UPDATETEXT #t.b @pd 0 NULL #t.a @ps
FETCH tb INTO @ps,@pd
END
CLOSE tb
DEALLOCATE tb
GO

--显示转换结果
SELECT * FROM #t
DROP TABLE #t
mathsfan 2008-12-29
  • 打赏
  • 举报
回复
不会,UP...
图片的常见存储与读取凡是有以下几种: 存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[]. 1.参数是图片路径:返回Byte[]类型: public byte[] GetPictureData(string imagepath) { /**/////根据图片文件的路径使用文件流打开,并保存为byte[] FileStream fs = new FileStream(imagepath, FileMode.Open);//可以是其他重载方法 byte[] byData = new byte[fs.Length]; fs.Read(byData, 0, byData.Length); fs.Close(); return byData; }2.参数类型是Image对象,返回Byte[]类型: public byte[] PhotoImageInsert(System.Drawing.Image imgPhoto) { //将Image转换成数据,并保存为byte[] MemoryStream mstream = new MemoryStream(); imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp); byte[] byData = new Byte[mstream.Length]; mstream.Position = 0; mstream.Read(byData, 0, byData.Length); mstream.Close(); return byData; }好了,这样通过上面的方法就可以把图片转换成Byte[]对象,然后就把这个对象保存到数据库中去就实现了把图片的二进制格式保存到数据库中去了。下面我就谈谈如何把数据库中的图片读取出来,实际上这是一个相反的过程。 读取图片:把相应的字段转换成Byte[]即:Byte[] bt=(Byte[])XXXX 1.参数是Byte[]类型,返回值是Image对象: public System.Drawing.Image ReturnPhoto(byte[] streamByte) { System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte); System.Drawing.Image img = System.Drawing.Image.FromStream(ms); return img; }2.参数是Byte[] 类型,没有返回值,这是针对asp.net中把图片从输出到网页上(Response.BinaryWrite) public void WritePhoto(byte[] streamByte) { // Response.ContentType 的默认值为默认值为“text/html” Response.ContentType = "image/GIF"; //图片输出的类型有: image/GIF image/JPEG Response.BinaryWrite(streamByte); }补充: 针对Response.ContentType的值,除了针对图片的类型外,还有其他的类型: Response.ContentType = "application/msword"; Response.ContentType = "application/x-shockwave-flash"; Response.ContentType = "application/vnd.ms-excel";另外可以针对不同的格式,用不同的输出类型以适合不同的类型: switch (dataread("document_type")) { case "doc": Response.ContentType = "application/msword"; case "swf": Response.ContentType = "application/x-shockwave-flash"; case "xls": Response.ContentType = "application/vnd.ms-excel"; case "gif": Response.ContentType = "image/gif"; case "Jpg": Response.ContentType = "image/jpeg"; }

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧