MIS2000 Lab. -- ASP.NET学习&分享 / ASP.NET案例精编(清华大学出版社)
您好,我来自台湾。很高兴与各位分享一些成果。希望对您有帮助。出版书籍是「ASP.NET案例精编 / 清华大学出版社」。

原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/20/ashx_beginner_03_db_picture_show.aspx

[.ashx檔?泛型处理例程?]基础入门#3....ADO.NET 与 将DB里面的二进制图片还原

 

 

有了前两篇文章的说明

[.ashx檔?泛型处理例程?]基础入门#1....能否用中文教会我?别说火星文?

[.ashx檔?泛型处理例程?]基础入门#2....FileUpload上传前,预览图片(两种作法--ashx与JavaScript)

 

 

现在可以搭配ADO.NET写写看。

 

书本「上集」Ch.9  GridView的超级链接字段,改用 .ashx来呈现内容

透过 URL网址(例如 test_02_DB.ashx?id=5)来传递信息

 

执行成果如下:

      

 

==== HTML画面设计 ====

需撰写后置程序代码。

    这个画面用 GridView + SqlDataSource,精灵设定就做好了)

      

 

==== .ashx档的内容 ====

 

 

把程序写在上图的「红色框框」里面

 

 

using System;

using System.Web;

//----自己写的(宣告)----

using System.Web.Configuration;  // Web.Config文件的DB连结字符串。

using System.Data;

using System.Data.SqlClient;

//----自己写的(宣告)----

 

 

    

    public void ProcessRequest (HttpContext context) {

        //context.Response.ContentType = "text/plain";

        //context.Response.Write("Hello World");

 

        //=======微软SDK文件的范本=======

        //----上面已经事先写好NameSpace --  using System.Web.Configuration; ----     

        //----或是写成下面这一行 (连结数据库)----

        SqlConnection Conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["写在Web.Config档案里面,数据库的连结字符串"].ConnectionString);

 

        SqlDataReader dr = null;

        SqlCommand cmd = new SqlCommand("select id,test_time,title from test where id = @id", Conn);

        // 批注:请使用参数来处理,避免SQL Injection攻击

        cmd.Parameters.AddWithValue("@id", context.Request["id"]);

 

        try     //==== 以下程序,只放「执行期间」的指令!=====================

        {   //== 第一,连结数据库。

            Conn.Open();   //---- 这时候才连结DB

 

            //== 第二,执行SQL指令。

            dr = cmd.ExecuteReader();   //---- 这时候执行SQL指令,取出数据

 

            //==第三,自由发挥,把执行后的结果呈现到画面上。

            dr.Read();

 

            context.Response.ContentType = "text/plain";

            context.Response.Write("<html>");

            context.Response.Write("  <body>");

            context.Response.Write("      <h3>Hello from a synchronous custom HTTP handler.</h3>");

            context.Response.Write("      *****" + dr["title"] );

            context.Response.Write("  </body>");

            context.Response.Write("</html>");

            

        }

        catch (Exception ex)

        {  //---- 如果程序有错误或是例外状况,将执行这一段

            context.Response.Write("<b>Error Message----  </b>" + ex.ToString() + "<HR />");

        }

        finally

        {   // == 第四,释放资源、关闭数据库的连结。

            if (dr != null)

            {

                cmd.Cancel();

                dr.Close();

            }

            if (Conn.State == ConnectionState.Open)

            {

                Conn.Close();

                Conn.Dispose();

            }

        }

                

    }

 

 

***********************************************************************************************************************

完成后,可以延伸上面的技巧,

搭配上一个范例,完成我们想要的功能

 

例如:图片上传之后,存入数据库的「Image字段」里面

透过.ashx档案,将这些二进制的内容,还原成一张图片,呈现在网页上。

 

从数据库里面,读取二进制的图片文件,请参阅:

http://www.cnblogs.com/travelcai/archive/2007/09/27/907203.html

 

http://davidma168.wordpress.com/2011/01/25/ashx-%E8%BC%B8%E5%87%BA%E5%9C%96%E7%89%87/

 

http://davidma168.wordpress.com/2011/01/25/ashx-output-image-2/

 

 

 

 

 

做了再说  (千万不要没动手做,就自己吓自己)

      然后回头看看微软 msdn网站的说明

      是不是觉得更清楚了?

 

是不是发现下面的专有名词---

     IsReusable,  IHttpHandler,  ProcessRequest,  HttpContext.......这些火星文已经慢慢变成稍微看得懂的东西?

 

    我在前面的小范例,已经动手操作过了、见过面了(不陌生)

    如此一来,心中不会畏惧、不要怕......后续学习是否更轻松?

 

做过以后,回头看「理论」一定更能吸收,不是吗?

 

微软 msdn网站的说明:http://msdn.microsoft.com/zh-tw/library/bb398986(VS.90).aspx

 

 

微软 msdn论坛,其它前辈的说明:http://social.msdn.microsoft.com/Forums/zh-TW/8edb2493-ec76-4e88-9926-f17fa03cddcb/aspnet-ashx

 

 

 

我以前说过,我有一套自己的「学习心法」

    我靠着它,自我学习!

    越学越轻松。

 

我出书、教课

    与其说要分享多少个范例?  不如说,我在 推广这样的学习方法

[转贴]GridView 72般绝技-- 作者:清清月儿。兼论:我学习.NET的心路过程

http://www.dotblogs.com.tw/mis2000lab/archive/2011/12/27/63495.aspx

 

 

如果您觉得这样的文章说明,很简单实用!立即有效!

请您支持 

 

但很可惜,书本的文字说明,永远不如「面对面」上课

      看书练功,可能要三个月~半年,而且看的一知半解???

      上课只要几天,就能抓到重点!!......   「醍醐灌顶」就是这个意思!!

请 参考一下 我 的 课 程

 

 

 

posted on 2013-09-09 18:22  MIS2000 Lab.  阅读(155)  评论(0编辑  收藏  举报


ASP.NET案例精编——适用于VS 2005/2008(配光盘)
 

当当网购买 http://product.dangdang.com/product.aspx?product_id=20583373&ref=search-1-pub