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

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

    有了前两篇文章的说明

    [.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

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

    请您支持 

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

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

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

    请 参考一下 我 的 课 程

  • 相关阅读:
    WEB服务器和应用服务器
    java中乱码问题
    面向对象的特征
    数据库中常见的需注意的问题
    String类
    网络编程
    C#泛型基础
    C#中sealed关键字的作用。
    C#自动属性优缺点分析
    TextView属性(转)
  • 原文地址:https://www.cnblogs.com/mis2000lab/p/3310381.html
Copyright © 2011-2022 走看看