适用于 .NET 的后关系数据库简介:Matisse - 第 6 部分






4.45/5 (20投票s)
2004 年 5 月 3 日
3分钟阅读

66821

979
使用后关系数据库进行 ASP.NET 编程。
引言
本系列文章已经介绍了 Matisse 后关系数据库的所有基础知识,以及它的优势,例如易用性和更好的性能。
本文介绍使用后关系数据库进行 ASP.NET 编程。我创建了两个演示程序来阐述本文。第一个是一个将数据与图像加载到数据库的 Windows 应用程序。第二个是一个从数据库检索图像及元数据并在 DataList
中显示它们的 ASP.NET 应用程序。这些程序很简单,但有几个技巧可以使程序更紧凑并提供更好的性能。
以下是前几篇文章列表
运行演示
要编译和运行演示应用程序,请先下载本文开头附件的源文件。在 Visual Studio .NET 2003 中创建一个新的空白解决方案,并添加三个项目:一个类库(DbSchema
)、一个 Windows 应用程序(MediaDemo
)和一个 ASP.NET 应用程序(MediaDemoASP
),如下图所示。解压下载的 zip 文件中的所有文件,并将它们相应地添加到这三个项目中。
在 Matisse Enterprise Manager 中,启动 ‘media
’ 数据库,并导入 zip 文件中包含的 ODL 文件 demo.odl 来加载数据库模式(选择 media 数据库图标,右键单击它,选择 Schema --> Import ODL Schema)。
编译这三个 .NET 项目,并运行 MediaDemo
Windows 应用程序来加载数据。您将看到以下窗口,然后选择您与其它源文件一起下载的 photos 文件夹,并单击 ‘Load Data’ 按钮将图像数据加载到数据库中。加载数据后,您可以在 ‘View Data’ 选项卡中查看导入的数据。
要从 Visual Studio .NET 运行 ASP.NET 演示,请选择 ‘MediaDemoASP
’ 项目作为 ‘Startup Project’,并选择 ‘StartForm.aspx’ 作为 ‘Start Page’。
检索图像
ASP.NET 演示使用 DataList
Web 控件显示照片列表及其描述,每页四张照片,如本文顶部的图所示。它在 SELECT
语句中使用 LIMIT
和 OFFSET
子句来限制返回的行数,从某个偏移量开始。请注意,SELECT
语句还返回 OID
(Object Identifier,相当于主键)列,该列将用于高效检索图像。其余的是使用 DataList
控件的教科书式编程。
string query =
"SELECT Title, Description, OID FROM Photo ORDER BY Title " +
" LIMIT " + PageSize +
" OFFSET " + (CurrentPage * PageSize);
// For DataList
MtCommand cmd = db.CreateCommand();
cmd.CommandText = query;
MtDataReader reader = (MtDataReader) cmd.ExecuteReader();
DataList1.DataSource = reader;
DataList1.DataBind();
reader.Close();
在包含 DataList
的 Web 窗体中,使用 OID
列指定缩略图 URL,如下所示
<asp:Image … ImageUrl=
'<%# PhotoThumbnailURL((string) DataBinder.Eval(Container.DataItem, "OID")) %>'>
以 OID
作为输入参数的 PhotoThumbnailURL
定义如下
public string PhotoThumbnailURL(string oid)
{
return "ReadThumbnail.aspx?oid=" + oid +
"&dbname=" + (string) ViewState["DbName"];
}
来自 ReadThumbnail.aspx.cs 的下一段代码将传入的 OID
字符串解析为整数。然后,它使用一个接受 OID 的构造函数(A 行)创建一个 Photo
对象,该对象是 Matisse
对象。因为它不使用 SQL 语句,所以它从数据库中更快地检索对象。要获取缩略图数据,请访问 Photo
对象的 Thumbnail
属性(B 行)。
byte[] imgdata = null;
db.Open();
db.StartVersionAccess();
/* Request.QueryString["oid"] returns OID in the format of '0x1234' */
int oid = Int32.Parse(Request.QueryString["oid"].Substring(2),
System.Globalization.NumberStyles.AllowHexSpecifier);
// retrieve the Movie object with the OID
Photo photo = new Photo(db, oid); // line A
// retrieve thumbnail image data of the movie from the database
imgdata = photo.Thumbnail; // line B
db.EndVersionAccess();
db.Close();
if ( null != imgdata )
Response.BinaryWrite(imgdata);
摘要
本文展示了一个简单的 ASP.NET 应用程序,该应用程序从 Matisse 数据库检索图像数据及一些描述,并使用 DataList
控件显示数据。
<< 上一篇 | 下一篇 >>
历史
- 2004 年 5 月 3 日:初始版本
许可证
本文没有明确附加许可,但可能包含在文章文本或下载文件中。如有疑问,请通过下方的讨论版块联系作者。作者可能使用的许可列表可以在 此处找到。