在SQL Server中存储图像时强化管理界面

在SQL Server中存储图像时强化管理界面 - 应用软件 - 电脑教程网

在SQL Server中存储图像时强化管理界面

日期:2007-01-02   荐:

在这篇文章中,我会告诉你如何强化管理界面,并提供给你一个更好使用图像的方法。



图像维护

把图像插入数据表中只是管理数据库的一个方面。另外,用户需要删除或编辑数据,甚至寻找图像的位置。所以,我们通过ASP.NET来建立一个管理界面,允许用户编辑图像数据,删除图像,添加新的图像,以及通过用户输入的字符串来查找图像。在这个界面里,我们会使用DataGrid控件来显示每一条数据。 DataGrid的每一行都将包括以下内容:

· ID: 数据表中为每个图像指定的唯一整数。

· Name: 插入图像时,需要为图像指定名称。这一项通过上传控件得到,所以它的内容是图像的文件名,以及插入时的完整路径。

· Type: 图像所对应的图像类型。

· Size: 图像的大小,单位是字节。

· Description: 由用户输入的图像说明。

· Image: 实际图像将以一个比较小的比例显示在DataGrid中(比例由图像本身决定)。也可以把它看作缩略图(宽50像素,高40像素)。

· Buttons: 每一条数据中都有编辑和删除的按钮。当用户点击编辑按钮时,更新和取消按钮将显示在编辑按钮的位置。更新按钮将所作修改写入数据库并退出编辑模式。取消按钮忽略一切修改,直接退出编辑模式。

另外,DataGrid顶端的添加新图像按钮可以让用户向数据库中添加新的图像。还有一个文本框和搜索按钮让用户可以在数据库中进行搜索。当用户点击搜索按钮时,将在数据库中搜索名称或说明中包含搜索字符串的数据条目。搜索结果将显示在DataGrid中。还有一个清除按钮,用于清除搜索文本框,并将所有数据重新载入DataGrid。

列表A列出了页面的VB.NET代码。

列表A

========

Const connString as String = "Data Source=localhost;Initial

Catalog=Northwind;User Id=username;Password=password;"

Sub Page_Load(sender As Object, e As EventArgs)

If (Not Page.IsPostBack) ThenBindDataSet(String.Empty)

End If

End Sub

Sub BindDataSet(searchString As String)

Dim conn As SqlConnection

Dim comm As SqlCommand

Dim sql As String

If (searchString = String.Empty) Thensql = "SELECT ID, Name,

ContentType, FileSize, Picture, Description " _

"FROM ImageData ORDER BY Name"

Elsesql = "SELECT ID, Name, ContentType, FileSize, Picture, Description

" _

"FROM ImageData WHERE Name Like '%" searchString _

"%' OR Description Like '%" searchString "%' ORDER BY Name"

End If

Tryconn = New SqlConnection(connString)comm = New SqlCommand(sql,

conn)conn.Open()dgImages.DataSource =

comm.ExecuteReader()dgImages.DataBind()

Catch SQLexc As SqlExceptionResponse.Write("Data error occurred: "

amp; SQLexc.ToString())

End Try

End Sub

Function ImageLink(strArgument) as String

Return ("displayImageVB.aspx?id=" & strArgument)

End Function

Sub dgImages_Edit(sender As Object, e As

DataGridCommandEventArgs)dgImages.EditItemIndex =

e.Item.ItemIndexBindDataSet(String.Empty)

End Sub

Sub dgImages_Cancel(sender As Object, e As

DataGridCommandEventArgs)dgImages.EditItemIndex =

-1BindDataSet(String.Empty)

End Sub

Sub dgImages_Update(sender As Object, e As DataGridCommandEventArgs)

Dim strName as String = CType(e.Item.Cells(1).Controls(0),

TextBox).Text

Dim strDesc as String = CType(e.Item.Cells(4).Controls(0),

TextBox).Text

Dim strSQL as String = "UPDATE [ImageData] SET [Name] = '" strName

_

"', [Description] = '" strDesc "' WHERE [ID] = "

e.Item.Cells(0).Text

Dim conn as New SqlConnection(connString)conn.Open()

Dim comm as SqlCommand = new SqlCommand(strSQL, conn)comm.CommandType =

CommandType.Textcomm.ExecuteNonQuery()conn.Close()dgImages.EditItemIndex

= -1BindDataSet(String.Empty)

End Sub

Sub dgImages_Delete(sender As Object, e As DataGridCommandEventArgs)

Dim sql as String sql = "DELETE FROM [ImageData] WHERE [ID] = "

e.Item.Cells(0).Text

Dim conn as New SqlConnection(connString)conn.Open()

Dim comm as SqlCommand = new SqlCommand(sql, conn)comm.CommandType =

CommandType.Textcomm.ExecuteNonQuery()conn.Close()dgImages.EditItemIndex

= -1BindDataSet(String.Empty)

End Sub

Sub AddImage(sender As Object, e As

EventArgs)Response.Redirect("addImage.aspx")

End Sub

Sub DoSearch(sender As Object, e As

EventArgs)BindDataSet(txtSearch.Text)

End Sub

Sub ClearSearch(sender As Object, e As EventArgs)

If Not (txtSearch.Text = "")

ThenBindDataSet(String.Empty)txtSearch.Text = ""

End If

End Sub

'

Runat=server />



列表B 列出了等价的C#代码。

列表B

===============

const string connString = "Data Source=Pentium4;Initial

Catalog=Northwind;User Id=sa;Password=;";

rivate void Page_Load(object sender, System.EventArgs e) {

if (!Page.IsPostBack) {BindDataSet(String.Empty);

} }

ublic void BindDataSet(string searchString)

{SqlConnectionconn;SqlCommandcomm;

tring sql;

if (searchString == String.Empty)sql = "SELECT ID, Name, ContentType,

FileSize, Picture, Description FROM ImageData ORDER BY Name";

elsesql = "SELECT ID, Name, ContentType, FileSize, Picture, Description

FROM ImageData WHERE Name Like '%" searchString "%' OR Description

Like '%" searchString "%' ORDER BY Name";

try {conn = new SqlConnection(connString);comm = new SqlCommand(sql,

conn);conn.Open();dgImages.DataSource =

comm.ExecuteReader();dgImages.DataBind();

} catch (SqlException ex) {Response.Write("Data Error: "

ex.ToString());

} }

ublic string ImageLink(object strArgument) {

return ("displayImageVB.aspx?id=" strArgument.ToString());

}

ublic void dgImages_Edit(Object sender, DataGridCommandEventArgs e)

{dgImages.EditItemIndex = e.Item.ItemIndex;BindDataSet(String.Empty);

}

ublic void dgImages_Cancel(Object sender, DataGridCommandEventArgs e)

{dgImages.EditItemIndex = -1;BindDataSet(String.Empty);

}

ublic void dgImages_Update(Object sender, DataGridCommandEventArgs e)

{

tring strName;

tring strDesc;

tring strSQL;SqlConnectionconn;SqlCommandcomm;strName =

((TextBox)(e.Item.Cells[1].Controls[0])).Text;strDesc =

((TextBox)(e.Item.Cells[4].Controls[0])).Text;strSQL = "UPDATE

[ImageData] SET [Name] = '" strName "', [Description] = '"

trDesc "' WHERE [ID] = " e.Item.Cells[0].Text;conn = new

SqlConnection(connString);conn.Open();comm = new SqlCommand(strSQL,

conn);comm.CommandType =

CommandType.Text;comm.ExecuteNonQuery();conn.Close();dgImages.EditItemIndex

= -1;BindDataSet(String.Empty);

}

ublic void dgImages_Delete(Object sender, DataGridCommandEventArgs e)

{

tring sql;sql = "DELETE FROM [ImageData] WHERE [ID] = "

e.Item.Cells[0].Text;SqlConnectionconn;SqlCommandcomm;conn = new

SqlConnection(connString);conn.Open();comm = new SqlCommand(sql,

conn);comm.CommandType =

CommandType.Text;comm.ExecuteNonQuery();conn.Close();dgImages.EditItemIndex

= -1;BindDataSet(String.Empty);

}

ublic void AddImage(Object sender, EventArgs e)

{Response.Redirect("sqlimagesexample1vb.aspx");

}

ublic void DoSearch(Object sender, EventArgs e)

{BindDataSet(txtSearch.Text);

}

ublic void ClearSearch(Object sender, EventArgs e) {

if (txtSearch.Text != "") {BindDataSet(String.Empty);txtSearch.Text =

"";

} }

'

Runat="server" />

以下是对代码的一些解释:

· DataGrid的OnEditCommand属性将Edit命令 (EditCommandColumn)指定到特定的子程序。对取消编辑的OnCancelCommand,保存修改的OnUpdateCommand,以及删除数据项的OnDeleteCommand也是一样。

· asp:BoundColumn元素在对应的数据集中将DataGrid的列与指定的列连接。DataField属性指定对应的列。

· ASP.NET的按钮控件使搜索和添加新项目更加轻松。它们的OnClick属性可以让你指定一个子程序,当按钮被按下时执行。

· DoSearch子程序在数据表中所有数据项的Description和Name中对搜索字符串进行搜索。搜索结果的各行将在DataGrid中显示。

· ClearSearch方法将所有数据重新载入DataGrid,并清除搜索文本框。

· BindDataSet方法负责将数据载入DataGrid并接受搜索字符串。如果搜索字符串为空,则执行的T-SQL语句中将设定为显示数据表中所有数据。否则,将使用搜索字符串来创建T-SQL语句来取出所有符合搜索字符串的记录,显示在DataGrid中。



标签: