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


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

图像维护

把图像插入数据表中只是管理数据库的一个方面。另外,用户需要删除或编辑数据,甚至寻找图像的位置。所以,我们通过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中。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus