www.baike369.com
百科369 > ASP.NET教程 > ASP.NET执行select命令

ASP.NET执行select命令


ASP.NET执行select命令

在ASP.NET中,可以通过程序执行SqlDataSource控件的Select()方法并显示返回的数据。

SqlDataSource控件是返回DataView还是IDataReader取决于该控件的DataSourceMode属性值。SqlDataSource控件的Select()方法返回一个实现IEnumerable接口的对象。DataView和IDataReader都实现这个接口。


实例

相片图库程序可以将照片上传到数据库表中并将照片再显示到页面上。操作步骤如下:

1. 在PhotoGallery.aspx网页中添加新图片,然后将上传的图片显示到网页中。程序代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PhotoGallery.aspx.cs" Inherits="PhotoGallery" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>ASP.NET向数据库表中添加图片和显示图片-www.baike369.com</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    <asp:DataList
        id="dlstImages"
        DataSourceID="srcImages"
        RepeatColumns="3"
        Runat="server">
        <ItemTemplate>
        <asp:Image ID="Image1"
            ImageUrl='<%# String.Format("DynamicImage.ashx?id={0}", Eval("Id")) %>'
            Width="250"
            Runat="server" />
        <br />
        <%# Eval("Description") %>
    </ItemTemplate>
    </asp:DataList>

    <hr />

    <asp:FormView
        id="frmImage"
        DataSourceID="srcImages"
        DefaultMode="Insert"
        Runat="server">
        <InsertItemTemplate>
        <asp:Label
            id="lblImage"
            Text="上传图片:"
            AssociatedControlId="upImage"
            Runat="server">
        </asp:Label>
        <br />
        <asp:FileUpload
            id="upImage"
            FileBytes='<%# Bind("Image") %>'
            Runat="server" />

        <br /><br />

        <asp:Label
            id="lblDescription"
            Text="描述:"
            AssociatedControlID="txtDescription"
            Runat="server">
        </asp:Label>

        <br />
        <asp:TextBox
            id="txtDescription"
            Text='<%# Bind("Description") %>'
            TextMode="MultiLine"
            Columns="50"
            Rows="2"
            Runat="server">
        </asp:TextBox>

        <br /><br />

        <asp:Button
            id="btnInsert"
            Text="添加图片"
            CommandName="Insert"
            Runat="server" />
        </InsertItemTemplate>
    </asp:FormView>
    <asp:SqlDataSource
        id="srcImages"
        SelectCommand="SELECT ID,Description FROM Images"
        InsertCommand="INSERT Images (Image,Description) VALUES (@Image,@Description)"
        ConnectionString="<%$ ConnectionStrings:Images %>"
        Runat="server">
    </asp:SqlDataSource>

    </div>
    </form>
</body>
</html>

PhotoGallery.aspx页面中的FormView控件中包含一个FileUpload控件。使用FileUpload控件可以从本地硬盘将图片上传到程序所使用的数据库表中。

同时,页面中也有一个DataList控件,它用于显示图片。包含在DataList控件ItemTemplate中的Image控件指向一个名为DynamicImage.ashx的文件,该文件表示呈现某个图片的HTTP处理程序。

2. DynamicImage.ashx处理程序的源代码如下:

<%@ WebHandler Language="C#" Class="DynamicImage" %>
using System.Data;
using System.Web;
using System.Web.Configuration;
using System.Web.UI;
using System.Web.UI.WebControls;

public class DynamicImage : IHttpHandler 
{
    public void ProcessRequest (HttpContext context) 
    {
        string imageId = context.Request.QueryString["Id"];
        SqlDataSource src = new SqlDataSource();
        src.ConnectionString = WebConfigurationManager.ConnectionStrings["Images"].ConnectionString;
        src.SelectCommand = "SELECT Image FROM Images WHERE Id=" + imageId;

        // Return a DataView
        DataView view = (DataView)src.Select(DataSourceSelectArguments.Empty);
        context.Response.BinaryWrite( (byte[])view[0]["Image"]);

        // Return a DataReader
        //src.DataSourceMode = SqlDataSourceMode.DataReader;
        //IDataReader reader = (IDataReader)src.Select(DataSourceSelectArguments.Empty);
        //reader.Read();
        //context.Response.BinaryWrite((byte[])reader["Image"]);
        //reader.Close();

    }
    public bool IsReusable 
    {
        get 
        {
            return false;
        }
    }
}

3. 执行结果如下:

ASP.NET向数据库表中添加图片和显示图片的操作效果

在DynamicImage.ashx的ProcessRequest()方法中,创建了SqlDataSource控件的实例,同时也初始化了该控件的ConnectionString属性和SelectCommand属性。最后,执行SqlDataSource控件的Select()方法,通过Response.BinaryWrite()方法呈现结果。

Select()方法的返回值被显式转换成了DataView对象。实际上,返回值可以转换为DataView或IDataReader,这两个对象都可以和Select()方法的结果配合使用。

在DynamicImage.ashx中,图片是使用DataView返回的。为说明如何通过Select()方法返回一个IDataReader,使用IDataReader返回图片的代码也包含在源代码中,不过这段代码被注释了,并没有执行。

Copyright© 2011-2016 www.baike369.com All Rights Reserved