原文出處  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

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

请您支持 

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

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

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

请 参考一下 我 的 课 程

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

  1. [.ashx檔?泛型处理程序?]基础入门#5....ADO.NET 与 将DB里面的二进制图片还原 (范例下载 & 大型控件的ImageField)

    [.ashx檔?泛型处理程序?]基础入门#5....ADO.NET 与 将DB里面的二进制图片还原 (范例下载 & 大型控件的ImageField) http://www.dotblogs.c ...

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

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

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

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/20/ashx_beginner_01.aspx [.ashx檔?泛型处理例程? ...

  4. .NET ORM 的 “SOD蜜”--零基础入门篇

    PDF.NET SOD框架不仅仅是一个ORM,但是它的ORM功能是独具特色的,我在博客中已经多次介绍,但都是原理性的,可能不少初学的朋友还是觉得复杂,其实,SOD的ORM是很简单的.下面我们就采用流行 ...

  5. C#基础入门 九

    C#基础入门 九 集合 对于很多应用程序,需要创建和管理相关对象组,有两种方式可以将对象分组,一是创建对象数组,如 object[] obj=new object[3]{1,2.33,"st ...

  6. C#基础入门 八

    C#基础入门 八 泛型 C#中的泛型能够将类型作为参数来传递,即在创建类型时用一个特定的符号,如"T"来作为一个占位符,代替实际的类型,等待实例化时用一个实际的类型来代替. pub ...

  7. MySQL基础入门(1)

    MySQL基础入门(1) 为什么学习MySQL 关系数据库管理系统(Relational Database Management System, RDBMS)是一种极为重要的工具,其应用十分广泛,从商 ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. 「译」JUnit 5 系列:基础入门

    原文地址:http://blog.codefx.org/libraries/junit-5-basics/ 原文日期:25, Feb, 2016 译文首发:Linesh 的博客:JUnit 5 系列: ...

随机推荐

  1. Redis多机功能总结

    1.通过Redis的复制功能,用户可以创建指定服务器的任意多个复制品,每个复制品服务器和被复制的原服务器拥有相同的数据: 2.通过将读请求分散给多个从服务器处理,用户可以减少主服务器在处理读请求方面的 ...

  2. The Ninth Hunan Collegiate Programming Contest (2013) Problem J

    Problem J Joking with Fermat's Last Theorem Fermat's Last Theorem: no three positive integers a, b, ...

  3. 翻译:Knockout 快速上手 - 3: knockoutJS 快速上手

    许多时候,学会一种技术的有效方式就是使用它解决实际中的问题.在这一节,我们将学习使用 Knockout 来创建一个常见的应用,库存管理应用. 应用概览 在创建我们的应用之前,我们需要一个公司,来理解应 ...

  4. android menu 开发

    menu 分类: 选项菜单(OptionsMenu) 上下文菜单(ContextMenu) 子菜单(SubMenu) 弹出菜单(Popup)   首先说 选项菜单(OptionsMenu) 一.方法介 ...

  5. dedecms首页怎么调用公司简介的内容

    DeDeCMS功能虽然强大,但还是有些细节上的功能没有实现,正如本文描述的问题一样,DEDECMS要在网站首页调用公司简介的内容,而且还要截取前多少个字符数的时候,DEDECMS标签中没有能实现这样的 ...

  6. 【转】appium_python_API文档

    1.contextscontexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的控 ...

  7. 请慢慢移动……由于操作快慢导致的bug

    最近的工作中,遇到一个由于操作快慢不同导致的bug,原因是,操作慢的时候程序接收到了停止操作,继续处理正确,而快速操作的时候程序来不及处理操作停止的动作,导致需要传入的数据值已经改变,程序报错.这种缺 ...

  8. WIFI知识累计之802.11协议radiotap头解析方法

    radiotap官方网站:http://www.radiotap.net/Radiotap 该网站详细介绍了radiotap的各个字段的长度和介绍,并包含解析代码项目地址,该文就在此网站的基础编写一些 ...

  9. 传输层(一)TCP的三次握手和四次挥手及关闭套接字的原理

    TCP连接需三次握手才能建立,断开连接则需要四次握手. 客户端TCP状态迁移: CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_W ...

  10. gem5 运行x86全系统仿真

    使用gem5可以启动Linux内核,称为全系统模拟,启动之后,可以通过telent连接,进行访问,但四telent有时不稳定,gem5推荐使用m5term进行连接访问,整个步骤如下: (1)打开终端, ...