您现在的位置: 西安电脑信息网 >> 电脑学院 >> 网站建设 >> asp.net >> 正文
Google
    欢迎访问西安电脑信息网(西安电脑信息网——西安电脑网-西安IT门户网站|西安网站建设|西安电脑维修网|西安电脑报价|西安二手电脑|西安电脑资讯|电脑爱好者论坛|电脑学院|IT图库|西安网站建设-西安电脑网|西安网站制作-西安电脑网|西安电脑维修|西安网站建设-西安电脑网|西安电脑维修|西安网站建设-西安电脑网|西安电脑维修|西安网站建设|西安电脑信息网|西安电脑网|西安网站建设|西安电脑维修网),网站正在建设中,谢谢您的支持,希望能给您一份满意的收获!  [admin]        
将图片插入数据库并使用asp.net读取出来的正确方法
作者:佚名    教程来源:网络    点击数:    更新时间:2007-10-14
书写本文是因为今天见到CSDN的首页上一篇存在明显失误的名为“在Asp.Net中从sqlserver检索(retrieve)图片”的文章。不说其错误是因为用其方法确实能从数据库中读取出图片并显示在浏览器,说其失误是因为代码的意图不能被完全的实现,作者也似乎对http协议以及浏览器在处理http数据的流程一知半解。



1、如何出错

以下是这片文章提到的方法:
Public Sub Page_Load(sender As Object, e As EventArgs)
Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Dim myCommand As New SqlCommand("Select * from Person", myConnection)
Try
myConnection.Open()
Dim myDataReader as SqlDataReader
myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)

Do While (myDataReader.Read())
Response.ContentType = myDataReader.Item("PersonImageType")
Response.BinaryWrite(myDataReader.Item("PersonImage"))
Loop

myConnection.Close()
Response.Write("Person info successfully retrieved!")
Catch SQLexc As SqlException
Response.Write("Read Failed : " & SQLexc.ToString())
End Try
End Sub

显然,编程者是想将Person表中所有的记录中的PersonImage字段所存储的图片一次性地输出到浏览器中,并且在输出成功地情况下在已输出的图片的下方打印出“Person info successfully retrieved!”信息。然而事实上上述代码仅仅能正确地输出第一条记录中的图片。对于浏览器来说,一个http请求获取一个文件(html或者图片),所以以上代码的输出将被作为一个文件(类型依据Response.ContentType = myDataReader.Item("PersonImageType")定)被浏览器处理。如果http相应的类型是image/jpeg之类的图片,则浏览器使用相应的图片解析功能对这一个图片文件进行解析。因此,上述代码的显示结果只能是第一条记录PersonImage字段的图片。后面的记录输出的图片数据将成为第一张图片的多余数据(此点具有普遍性,但并非绝对,依图片的格式而定),从而后面的“Person info successfully retrieved!”的信息也自然无法本显示出来,因为这些信息已经是图片文件里面的编码了。

[本文共有 4 页,当前是第 1 页] <<上一页 下一页>>

2、正确的做法

A、将图片输入到数据库中,以下是一个将图片输入到数据库的代码片断:(完整的DEMO程序见附录一)

以下是引用片段:
FileStream fs=File.OpenRead(filePath.Text);

byte[] content=new byte[fs.Length];

fs.Read(content, 0,content.Length);

fs.Close();



SqlConnection conn=new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DatabaseImage;Data Source=(local)");

conn.Open();



SqlCommand comm=conn.CreateCommand();

comm.CommandText="insert into Images(Image, contentType) values(@image, @contentType)";

comm.CommandType=CommandType.Text;



comm.Parameters.Add("@image", SqlDbType.Image).Value=content;

comm.Parameters.Add("@contentType", SqlDbType.NVarChar).Value=

GetContentType(new FileInfo(filePath.Text).Extension.Remove(0,1));



if(comm.ExecuteNonQuery()==1)

{

MessageBox.Show("Successfully insert image into database!");

}

else

{

MessageBox.Show("Failed to insert image into database");

}



conn.Close();



B、将数据库中的图片读出来的代码片断:(完整DEMO程序见附录二)

[本文共有 4 页,当前是第 2 页] <<上一页 下一页>>

发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
 
  • 上一篇教程:

  • 下一篇教程:
  • 相关文章
    巧用QQ截图功能把电影变成动态QQ
    什么是RSS?
    网络术语_网络术语大全
    电脑显示器不显示了
    怎么超频?什么是超频(精
    有线宽带路由器的详细设置方法
    一招可以克死所有病毒的方法
    如何设置液晶显示器的刷新率?
    笔记本的电池的保养和使用技巧
    IE问题解决方法汇总
    热门文章
    普通教程[电脑常识]巧用QQ截图功能
    普通教程[电脑常识]什么是RSS?
    普通教程[电脑常识]网络术语_网络术
    普通教程[电脑常识]电脑显示器不显
    普通教程[电脑常识]怎么超频?什么
    普通教程[电脑常识]有线宽带路由器
    普通教程[电脑常识]一招可以克死所
    普通教程[电脑常识]如何设置液晶显
    普通教程[电脑常识]笔记本的电池的
    普通教程[电脑常识]IE问题解决方法
    推荐文章
    推荐教程[电脑常识]能上QQ不能上网
    推荐教程[电脑常识]电脑应用技巧与
    推荐教程[电脑常识]家庭多机共享上
    推荐教程[电脑常识]数据恢复常用技
    推荐教程[电脑常识]笔记本电脑使用
    推荐教程[电脑常识]如何让电脑运行
    特别声明
    本站的大部分资料、文章都来自网上收集,其版权归作者本人所有,如果有任何侵犯您权益的地方,请与我联系,我们将马上进行整理,谢谢。
    - 网站地图 - 友情链接 - 联系我们 - 版权申明 - 站长信箱 - 互联网违法和不良信息举报中心
    联系方式 E-mail: 900c@163.com QQ:30834850 技术支持:西安电脑信息网
    Copyright @ 2006 - 2007 900C Inc. All Rights Reserved