在這篇文章中,我會告訴你如何強化管理界面,並提供給你一個更好使用圖像的方法。
圖像維護
把圖像插入數據表中只是管理數據庫的一個方面。另外,用戶需要刪除或編輯數據,甚至尋找圖像的位置。所以,我們通過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
'
您正在看的SQLserver教程是:在SQL Server中存儲圖像時強化管理界面。>
Runat=server />
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,
dgImages_Update(Object sender, DataGridCommandEventArgs e)
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
{
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中。