亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ADO.NET 數據庫實例教程

2019-11-18 19:53:11
字體:
來源:轉載
供稿:網友

ADO.NET數據庫編程比較復雜,名目繁多的類、對象、屬性、方法讓每一個編程者都感覺惱火。本文旨在介紹asp.net Beta2數據庫編程的主要內容,幫助編程者最快的了解ADO.NET數據庫編程的精髓。

一、 Managed

Managed Providers提供簡單的方法連接和訪問數據庫,有點類似于數據庫連接,當然又比它強的多。Managed Providers提供OleDb和SQL Server兩種編程接口。因為SQL Server是微軟自己的產品,因此,專門提供了一個針對SQL Server的接口,使用這個接口訪問SQL Server的效率應該比使用OleDb強。

NameSpaces

本文所有的例子程序都需要使用以下NameSpaces:

<%@ Import Namespace="System.Data" %>
 ?。?@ Import Namespace="System.Data.Oledb" %>

Connection

為了連接數據庫,必須使用OleDbConnection:

Dim objConn as New OleDBConnection
  ("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:/sff/site/db/users.mdb")

當然,你也可以將具體的連接方法作為變量使用,在連接數據庫以后,必須打開數據庫:

objConn.Open()

這樣,就可以使用數據庫了,一般在最后,我們都要求關閉數據庫連接:

objConn.Close()
  objConn=Nothing
  Command

連接數據庫以后,就可以發送命令對數據庫進行操作了,OleDbCommand允許發送命令對數據庫進行操作。根據發送的SQL語句,我們可以對數據庫進行幾乎所有操作。

Dim objCmd as New OleDbCommand("SELECT * From users", objConn)

以上語句建立Command,根據習慣不同,也可以使用以下方法:

Dim objCmd as New OleDbCommand()
objCmd.Connection = objConn
objCmd.CommandText = "SELECT * FROM users"

還可以這樣:

Dim objCmd as New OleDbCommand(SQL String, connection string)

仔細觀察上面的語句,我們發現在定義OleDbCommand時,可以同時使用數據庫連接OleDbConnection和數據庫連接語句。以上代碼并沒有執行SQL語句,現在我們來看到底怎樣執行:

ExecuteNonQuery

當執行沒有返回數據的操作的時候,我們可以使用以上方法,比如插入數據、更新數據等操作,具體這樣執行:

objCmd.ExecuteNoQuery
  ExecuteReader

在需要一個Data Reader的時候,我們可以使用以上方法,具體這樣執行:

Dim objRd as OleDbDataReader
  objRd = objCmd.ExeuteReader

ExecuteScalar

使用ExecuteScalar方法來取得一個單個地返回數據,比如對數據的統計。

Data Reader

OleDbReader是專門用來讀取數據的對象,這個對象除了讀數據以外,不能做其他任何數據庫操作。盡管比較簡單,但是在用來瀏覽數據的時候效率是非常高的。

Dim objReader as OleDbDataReader
  objReader = objCmd.ExecuteReader
  While objReader.Read
  Response.Write(objReader.GetString(0) & "<br>")
  End While

以上語句讀取Command的返回結果的第一個字段,這個字段是字符型數據。我們可以使用其他方法取得各種類型的數據:

GetBoolean(x)
  GetByte(x)
  GetBytes(x)
  GetChar(x)
  GetChars(x)
  GetDataTypeName(x) -取得數據類型
  GetDateTime(x)
  GetDecimal(x)
  GetDefaultStream(x)
  GetDouble(x)
  GetFieldType(x)
  GetFloat(x)
  GetGuid(x)
  GetInt16(x)
  GetInt32(x)
  GetInt64(x)
  GetName(x) - 取得字段名
  GetOrdinal(name) -根據字段名取得字段序號
  GetString(x)
  GetTimeSpan(x)
  GetValue(x)
  GetValues(values())

以上方法都是Command返回數據。

Data Adapter

OleDbDataAdapter取得數據并且數據與DataSet之間建一座橋梁,可以這樣使用:

Dim objAdapter as New OleDbDataAdapter("SELECT * FROM users", objConn)

實現方法有點類似于OleDbCommand。OleDbAdapter可以填充DataSet,也可以修改數據然后提交以實現對具體數據的修改:

Dim ds as Dataset = New DataSet()
  objAdapter.Fill(ds, "users")

以上語句實現將SQL語句取得的Users表的數據填充到DataSet。

Mappings可以實現對DataSet的列取別名:

objAdapter.TableMappings.Add("adbtable", "users")
With objAdapter.TableMappings(0).ColumnMappings
.Add("PID", "ID")
.Add("LastName", "LName")
.Add("StreetAddress", "Addy")
End With
objAdapter.Fill(ds)

當使用了以上代碼以后,就可以用ds.Tables("users")來代替ds.Tables("adbtable")了。

Command Builder

在下一章我們可以看到Command Builder的具體使用和強大功能。

練習:

如果你能理解以下代碼,你就可以看下一章的內容了:

<%@ Import Namespace="System.Data" %>
 ?。?@ Import Namespace="System.Data.Oledb" %>
 ?。約cr
ipt language="VB" runat="server">
  Sub Page_Load(sender as object, e as eventargs)

Dim objConn as New OleDBConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:/sff/site/db/users.mdb")
  objConn.Open()

Dim ds as Dataset = New DataSet()
  Dim objAdapter as New OleDbDataAdapter("SELECT * FROM users", objConn)
  Dim objCmdBld As New OleDbCommandBuilder(objAdapter)

objAdapter.Fill(ds, "users")

End Sub
 ?。?script>

二、 Data Set

本章將介紹DataSet對象,DataSet對象包含內容很多,我們基本上都將涉及,包括DataTables、DataRows等。

什么是DataSet

回頭看看ASP,我們知道當查詢數據的時候,返回的數據是放在RecordSet中的,RecordSet只能保存返回的一個表的數據,而且它很不靈活。

DataSet在RecordSet上增加了很多功能,并且,它可以保存多個返回的數據表結果。

DataSet被分解為很多部分比如DataTables和DataRows,可以使用它們創建一個DataSet而不一定要連接到一個具體的數據庫。當然,DataSet本身就是離線數據,所有的數據都可以離線使用而不必一直連接到數據庫,只有需要對數據庫進行編輯的時候才需要連接到數據庫。

實踐

Dim ds1 As New DataSet()
  Dim dtable As new DataTable("people")
  With dtable.Columns
  .Add("FName", System.Type.GetType("System.String"))
  .Add("LName", System.Type.GetType("System.String"))
  .Add("UID", System.Type.GetType("System.Int32"))
  End With
  dtable.Columns("UID").AutoIncrement = True
  ds1.Tables.Add(dtable)

dim pkey() as DataColumn = {ds1.Tables("people").Columns("UID")}
  ds1.Tables("people").PrimaryKey = pkey

以上語句稍微有點復雜,我們來看看:

前半部分我們建立了一個DataSet和一個叫People的DataTable,然后,我們為這個DataTable加入了三個列并將"UID"列設為自動遞增。最后,將這個DataTable加入到了DataSet。

第二部分我們現在不需要理解,只要知道定義了主鍵就可以了。

DataTable就是一個數據表,我們可以對這個表進行如:增加數據、修改數據等操作。我們也可以通過DataSet建立一個DataTable:

Dim dtable As DataTable = ds1.Tables("people")

這樣,將DataSet的表People的結構和數據拷貝到了DataTable中,盡管它是無連接的,但是仍然可以通過修改這個DataSet來更新DataSet表,因此,如果我們在dtable中增加一列并且接受改變就以實現對DataSet的修改:

Dim row as DataRow = dtable.NewRow()
  row(0) = "Philip"
  row(1) = "Quinn"
  dtable.Rows.Add(row)
  dtable.AcceptChanges

這樣我們就建立了一個新的DataRow,這和用dtable.NewRow()建立一個新的數據列一樣,我們還可以給這個列取名了Fname。

因為以上的DataTable來自DataSet,如果我們使用dtable.AcceptChanges方法更新DataTable,DataSet也會被更新:

<%@ Import Namespace="System.Data" %>
 ?。約cript language="VB" runat="server">
  Sub Page_Load(sender as object, e as eventargs)
  Dim ds1 As New DataSet()
  Dim dtable As new DataTable("people")
  With dtable.Columns
  .Add("FName", System.Type.GetType("System.String"))
  .Add("LName", System.Type.GetType("System.String"))
  .Add("UID", System.Type.GetType("System.Int32"))
  End With

dtable.Columns("UID").AutoIncrement = True
  ds1.Tables.Add(dtable)

Dim dtable2 As DataTable = ds1.Tables("people")

Dim row as DataRow = dtable2.NewRow()
  row(0) = "Philip"
  row(1) = "Quinn"
  dtable2.Rows.Add(row)
  dtable2.AcceptChanges

Response.Write(ds1.Tables("people").Rows(0)("FName").ToString)
  End Sub
 ?。?script>

以上代碼將顯示"Philip",現在我們來看看具體過程:

1、 建立一個DataSet和一個叫"People"的DataTable;
  2、 增加三個數據列并且設置它們的數據屬性;
  3、 將它們加入到DataSet;
  4、 建立另外一個DataTable,這個DataTable是剛才建立的那個的拷貝;
  5、 用DataTable建立新的DataRow并加入數據;
  6、 接受數據改變同時更新了DataSet;
  7、 顯示第一個數據列;

DataRows

DataRow是DataTable的數據列,剛才我們已經看到,我們可以使用DataTable的以下方法建立一個新的DataRow:

ds1.Tables("people").Rows(0)("FName") = "Phil"

以上語句中,ds1.Tables("people")選擇表"people",.Rows(0)選擇表的第一行,("FName")選擇表的字段為"Fname"。

DataRows是數據列的集合,通過以下語句取得:

Dim drow as DataRowCollection = ds1.Tables("people").Rows

對于DataRows,我們基本上不能做太多。如果針對一個具體的數據列,我們可以這樣:

Dim drow2 as DataRow = drow.Item(0)

需要修改這個列的數據,可以這樣:

drow2(0) = "Philip"
  drow2.AcceptChanges

可能說了那么多,我們都覺得比較復雜,我們來看看這個圖示:

通過這個圖示我們很容易就理清了DataSet、DataTable、DataRowCollection、DataRows、DataColumn和DataColumnCollection之間的相互關系。

三、 DataSet的使用

在第一章我們介紹了數據連接、執行查詢等內容,第二章我們介紹了DataSet的方方面面,這一章我們將具體使用DataSet。

DataSet <-> Data Source

DataSet和Data Source通過DataAdapter進行聯系,當DataSet取得數據庫數據以后,就和數據庫斷開連接,針對數據作的所有數據修改在沒有提交以前都在DataSet里面保存。

數據修改

我們將通過一個小的舉例來說明數據怎樣被修改和提交。

這是數據結構(access設計)


Field NameTypeFName LNameID
FNameTextPhilipQuinn 1
LName TextJoesphPayne2
IDAutoNumberDouglasAdams 3
  MichaelOkuda4

舉例一:

我們將一段一段的看程序代碼:

<%@ Page Language="VB" %>

<%@ Import Namespace="System.Data" %>
 ?。?@ Import Namespace="System.Data.Oledb" %>
  <script language="VB" runat="server">
  Sub Page_Load(sender as object, e as eventargs)

以上代碼導入NameSpace同時說明編程語言為VB;

Dim objConn as New OleDBConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:/sff/site/db/test.mdb")
  objConn.Open()

Dim ds as Dataset = New DataSet()
  Dim objAdapter as New OleDbDataAdapter("SELECT * FROM users", objConn)
  Dim objCmdBld as New OleDbCommandBuilder(objAdapter)

objAdapter.Fill(ds, "users")

以上代碼建立了Connection、DataAdapter和CommandBuilder,并且填充了DataSet。我們必須注意以下幾點:

一、 DataAdapter是數據和DataSet之間的橋梁;

二、 CommandBuilder建SQL語句來執行;

Dim drow as DataRow

以上語句聲明一個DataRow;

drow = ds.Tables("users").NewRow()

drow(0) = "Gene"
  drow(1) = "Rodenberry"
  ds.Tables("users").Rows.Add(drow)

drow = ds.Tables("users").NewRow()

drow(0) = "Maxwell"
  drow(1) = "Stewart"
  ds.Tables("users").Rows.Add(drow)

以上代碼為DataSet增加一個新的列;

objAdapter.Update(ds, "users")

以上代碼將更新提交到數據庫;

End Sub
  </script>

現在看看數據庫,會發現已經多了兩列。

另外一個舉例

我們可以看一個完整的舉例:

<%@ Page Language="VB" Debug="true" %>

<%@ Import Namespace="System.Data" %>
 ?。?@ Import Namespace="System.Data.Oledb" %>
  <script language="VB" runat="server">
  Sub Page_Load(sender as object, e as eventargs)

Dim objConn as New OleDBConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:/sff/site/db/test.mdb")
  objConn.Open()

Dim ds as Dataset = New DataSet()
  Dim objAdapter as New OleDbDataAdapter("SELECT * FROM users", objConn)
  Dim objCmdBld as New OleDbCommandBuilder(objAdapter)

objAdapter.Fill(ds, "users")

Dim drow as DataRow

drow = ds.Tables("users").Rows(1)

drow(0) = "Joseph"

ds.Tables("users").Rows(0).AcceptChanges

objAdapter.Update(ds, "users")

End Sub
 ?。?script>

總結:

以上我們知道了怎樣更新DataSet的數據,可能那些并不是特別實用,下一章我們將涉及到用較好的方式顯示數據和通過TextBox修改數據。

四、數據顯示和修改

這一章我們將學習怎樣顯示數據,喜歡偷懶的你可以從拷貝以下代碼開始:

<%@ Page Language="VB" Debug="true" %>

<%@ Import Namespace="System.Data" %>
 ?。?@ Import Namespace="System.Data.Oledb" %>
  <script language="VB" runat="server">
  Sub Page_Load(sender as object, e as eventargs)

Dim objConn as New OleDBConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:/sff/site/db/test.mdb")
  objConn.Open()

Dim ds as Dataset = New DataSet()
  Dim objAdapter as New OleDbDataAdapter("SELECT * FROM users", objConn)
  Dim objCmdBld as New OleDbCommandBuilder(objAdapter)

objAdapter.Fill(ds, "users")

Repeater

Repeater是一個根據面板循環顯示數據的控件。
  ItemTemplate:數據主要在這里顯示
  AlternativeItemTemplate:利用它可以應用交替的樣式;
  HeaderTemplate:頭格式;
  SeparatorTemplate:分隔數據列;
  FooterTemplate:腳格式
  DataBind()
  DataBind()將數據與頁面控件綁定:

Repeater1.DataSource = ds.Tables("users").DefaultView
  DataBind()

以上代碼將數據綁定到Repeater,如果沒有綁定,數據不會顯示。

其他代碼

以下是舉例的其他代碼:

Rpt.DataSource = ds.Tables("users").DefaultView
  DataBind()
  End Sub
  </script>
 ?。糷tml><body><font face="Arial" size="2">
  <asp:repeater id="Rpt" runat="server">

<HeaderTemplate>
  <table border="0" cellspacing="1" cellpadding="3">
 ?。紅r>
 ?。紅d bgcolor="#6699FF" width="25%">Last Name</td>
 ?。紅d bgcolor="#6699FF" width="25%">First Name</td>
  </tr>
 ?。?HeaderTemplate>

<ItemTemplate>
  <tr>
 ?。紅d>
  <%# Container.DataItem("LName") %>
 ?。?td><td>
 ?。?# Container.DataItem("FName") %>
  </td>
 ?。?tr>
  </ItemTemplate>

<FooterTemplate>
 ?。?table>
  </FooterTemplate>

</asp:repeater>
 ?。?font></body></html>

說明:

一、 設置了Repeater的DataSource;
  二、 綁定數據到Repeater;
  三、 Repeater數據控件開始;
  四、 HeadTemplate定義Repeater的頭信息;
  五、 ItemTemplate定義具體數據填充;
  六、 FooterTemplate定義Repeater腳信息;

DataList

DataList和Repeater有點相似,和Repeater不同的是,DataList可以編輯數據??梢院蚏epeater一樣使用Template,但是它具有兩點不同:

SelectedItemTemplate:顯示選擇的列;

EditItemTemplate:顯示要編輯的列;

以下是一個使用DataList的簡單舉例:

dl.DataSource = ds.Tables("users").DefaultView
  Databind()
  End Sub
  Sub dl_ItemCommand(sender as object, e as DataListCommandEventArgs)
  dl.SelectedIndex = e.Item.ItemIndex
  dl.DataBind()
  End Sub
 ?。?script>

<html><body><font face="arial" size="2"><form runat="server">
  <asp:datalist id="dl" runat="server"
  HeaderStyle-BackColor="#6699FF"
  SelectedItemStyle-BackColor="#6666FF"
  SelectedItemStyle-ForeColor="#FFFFFF"
  RepeatLayout = "table"
  RepeatDirection = "vertical"
  DataKeyField = "ID"
  OnItemCommand="dl_ItemCommand">

<HeaderTemplate>
  Last Name, click for full name.
 ?。?HeaderTemplate>

<ItemTemplate>
  <asp:linkbutton id="b1" runat="server" Text='<%# Container.DataItem("LName") %>' CommandName = "select" />
 ?。糱r>
 ?。?ItemTemplate>

<SelecteditemTemplate>
  <%# Container.DataItem("LName") & ", " & Container.DataItem("FName") %>
 ?。糱r>
  </SelectedItemTemplate>
 ?。?asp:datalist>
  </form></font>
 ?。?body>
 ?。?html>

說明:

一、 綁定數據以后,建立了一個過程;
  二、 將DataList放入Form中,因為在以下的步驟中要求根據選擇列刷新頁面;
  三、 接著定義了一些數據顯示格式;
  四、 HeaderTemplate:DataList頭信息;
  五、 ItemTemplate:加入鏈接,定義事件;
  六、 SelectedItemTemplate:顯示First 和 Last Name;

DataGrid

可能它是功能最強大的控件,不管簡單還是復雜它都可以實現。
  和ItemTemplate不同,DataGrid有不同類型的列:
  Bound Columns:DataGird默認列顯示方式;
  Button Columns:按鈕列;
  Edit Command Column:可以編輯的列;
  Hyperlink Column :帶連接的列;
  Templated Column :自定義列顯示;

dg.DataSource = ds.tables("users").DefaultView
  DataBind()
  End Sub
  </script>

<asp:DataGrid id="dg" runat="server" />
  以上代碼很簡單,就是綁定數據。
  dg.DataSource = ds.tables("users").DefaultView
  DataBind()
  End Sub
  </script>

<asp:DataGrid id="dg" runat="server"
  BorderColor="black"
  GridLines="vertical"
  cellpadding="3"
  cellspacing="1"
  width="50%"
  Font-Names="Arial"
  Font-Size="10pt"
  HeaderStyle-BackColor="#6699FF"
  AlternatingItemStyle-BackColor="#6666FF"
  AutoGenerateColumns="False">
 ?。糃olumns>

<asp:BoundColumn HeaderText="ID" DataField="ID" />

<asp:templateColumn HeaderText="Name">
  <ItemTemplate>
 ?。糰sp:label id="Name" runat="server" Text='<%# Container.DataItem("FName") & " " & Container.DataItem("LName") %>' />
  </ItemTemplate>
 ?。?asp:templatecolumn>

</Columns>

</asp:datagrid>

可能有一點復雜,我們看說明:

一、 綁定數據以后,設置了一些DataSet顯示效果,包括字體、表寬、頭信息背景顏色、交替背景顏色、是否自動生成數據表等;

二、 加入一個自定義格式列,該列名為Name,由字段Fname和Lname組成;

現在才剛剛開始

可能現在你還沒有感受到DataSet的好處,以后的章節我們將學習怎樣編輯數據。

五、理解DataGrid

數據放入DataGrid以后,除了一般的顯示以外,我們還需要對這些數據進行編輯、修改??戳饲皫讉€章節你可能認為DataGrid比較簡單,數據處理也比較方便。其實,如果需要真正做一個應用,我們會發現前面的知識還遠遠不夠。以下所用的數據庫和前面的章節完全相同,一些設置我們可以參考前面章節。我們先來看代碼:

<%@ Page Language="VB" Debug="true" %>
  <%@ Import Namespace="System.Data" %>
 ?。?@ Import Namespace="System.Data.Oledb" %>
 ?。約cript language="VB" runat="server">
  Dim objConn as New OleDBConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:/sff/site/db/test.mdb")
  Dim ds as Dataset = New DataSet()
  Dim objAdapter as New OleDbDataAdapter("SELECT * FROM users", objConn)

Sub Page_Load(sender as object, e as eventargs)
  objConn.Open()
  objAdapter.Fill(ds, "users")
  dg.DataSource = ds
  dg.DataMember = "users"
  If Not Page.IsPostBack Then
  dg.Databind()
  End If
  End Sub

sub dg_edit(sender as object, e as DataGridCommandEventArgs)
  dg.edititemindex = -1
  dg.DataBind()
  end sub

sub dg_cancel(sender as object, e as DataGridCommandEventArgs)
  dg.edititemindex = -1
  dg.databind()
  end sub
  </script>

以上程序代碼很簡單直接,我們應該都可以看懂。只是需要注意Page_Load的對數據綁定的處理,在幾乎所有的數據庫程序中,我們都使用這種方式處理數據綁定,所以,這個處理方式一定要牢記。以上是數據連接和事件處理部分,現在我們看DataGrid部分。

自定義DataGrid

以下代碼演示了自定義DataGrid的實現,在實際應用中,我們基本都是這樣使用DataGrid,以下代碼很有典型性,可以作為一個好的參考。

<form runat="server">
 ?。糰sp:DataGrid id="dg" runat="server"
  Bordercolor="black"
  gridlines="vertical"
  font-names="Arial"
  font-size="10pt"
  HeaderStyle-BackColor="#FFCC00" '表格頭信息
  ItemStyle-BackColor="#FFCC66" '每行背景色
  AlternatingItemStyle-BackColor="#FFFFFF" '交替背景色
  AutoGenerateColumns="False" '自定義每行
  OnEditCommand="dg_edit" '以下三個事件處理
  OnCancelCommand="dg_cancel"
  OnUpdateCommand="dg_update">

'自定義每行顯示
  <Columns>
 ?。糰sp:boundcolumn readonly="true" headertext="ID" DataField="Auto" />
  <asp:boundcolumn headertext="First Name" DataField="Number1" />
 ?。糰sp:boundcolumn headertext="Last Name" Datafield="Number2" />
  <asp:editcommandcolumn edittext="Edit" CancelText="Cancel" UpdateText="Save" HeaderText="" />
 ?。?Columns>

</asp:dataGrid>
 ?。?form>

以上代碼中,自定義了數據編輯列,這些相應的處理在前面已經給出代碼。我們現在來看事件處理。

OnEditCommand

以下是編輯按鈕處理代碼:

sub dg_edit(sender as object, e as DataGridCommandEventArgs)

dg.edititemindex = e.item.itemindex
  dg.databind()
  end sub

以上代碼需要注意的是,e.item.itemindex就是我們需要編輯的那行數據。在對數據作任何變動以后,都需要重新綁定數據,也就是DataBing()。

OnCancelCommand

取消按鈕處理和上面的編輯按鈕處理差不多,區別的是,在這里,dg.edititemindex被設為-1,也就是將數據恢復到原來狀態。

OnUpdateCommand

先來看數據更新代碼:

sub dg_update(sender as object, e as DataGridCommandEventArgs)
  Dim FNAME As TextBox = e.item.cells(1).controls(0)
  Dim LNAME As TextBox = e.item.cells(2).controls(0)
  Dim sqlstr As String

sqlstr = "UPDATE users SET " & _
  "Number1 = '" & FNAME.Text & "', " & _
  "Number2 = '" & LNAME.Text & "' " & _
  "WHERE Auto = " & e.item.cells(0).text

Dim objCommand = New OLEDBCommand(sqlstr, objConn)
  objCommand.ExecuteNonQuery()

ds.Tables.Clear
  objAdapter.Fill(ds, "users")

dg.edititemindex = -1
  dg.DataBind()
  end sub

以上代碼將建立兩個TextBox,這兩個TextBox就是DataGrid中的復本。然后用SQL語句更新數據,最后重新綁定數據。

總結

以上代碼可能初學者比較難懂,而且,上面的數據更新方法也不是很好。但是為了我們更好理解,我們還是可以參考以上代碼。

六、DataGrid數據排序

 

數據排序在一些特殊的場合是必要的。下面我們將詳細介紹DataGrid中的數據排序功能。在對DataGrid數據實現排序功能以前,我們需要做以下準備:

1、 將AutoGenerateColumns設為打開,這樣自定義數據列功能將失去,同時也將失去直接編輯功能。其實這無關緊要的,數據顯示和編輯分開不同頁面這種模式其實是現在比較認可的方法。

2、 必須將AllowSorting設為真,這樣,在每一列數據的標題將建立一個鏈接,點擊這個鏈接將按照這個字段排序。

3、 必須建立排序事件,也就是OnSortCommand。

現在看代碼:

<asp:DataGrid id="dg" runat="server"
  Bordercolor="black"
  gridlines="vertical"
  font-names="Arial"
  font-size="10pt"
  HeaderStyle-BackColor="#FFCC00"
  ItemStyle-BackColor="#FFCC66"
  AlternatingItemStyle-BackColor="#FFFFFF"
  AutoGenerateColumns="True"
  OnEditCommand="dg_edit"
  OnCancelCommand="dg_cancel"
  OnUpdateCommand="dg_update"
  OnSortCommand="dg_sort"
  AllowSorting="True"
 ?。?BR> ?。?asp:dataGrid>

以下是運行界面:

排序事件處理

排序需要用到DataView,現在我們來看排序處理:

sub dg_sort(sender as object, e as DataGridSortCommandEventArgs)
  Dim dtable as DataTable = ds.Tables("users")
  Dim dview as new DataView(dtable)
  dview.sort = e.SortExpression.ToString & " ASC"
  dg.DataSource = dview
  dg.databind()
  end sub

從以上代碼我們可以發現,數據排序功能的實現是需要依靠DataView的,排序以后,綁定數據。應用Data View還可以實現其他很多功能,我們在這里只介紹它的排序應用。

升序和降序

我們可以給用戶選擇升序和降序來排列數據:

<form runat="server">
 ?。糰sp:DataGrid id="dg" runat="server"
  Bordercolor="black"
  gridlines="vertical"
  font-names="Arial"
  font-size="10pt"
  HeaderStyle-BackColor="#FFCC00"
  ItemStyle-BackColor="#FFCC66"
  AlternatingItemStyle-BackColor="#FFFFFF"
  AutoGenerateColumns="True"
  OnEditCommand="dg_edit"
  OnCancelCommand="dg_cancel"
  OnUpdateCommand="dg_update"
  OnSortCommand="dg_sort"
  AllowSorting="True"
  >
 ?。?asp:dataGrid>
  <p>
 ?。糰sp:radiobuttonlist runat="server" id="sortby" repeatdirection="horizontal" textalign="right" >
  <asp:listitem selected="true">Ascending</asp:listitem>
 ?。糰sp:listitem>Descending</asp:listitem>
 ?。?asp:radiobuttonlist>
 ?。?form>
  以上大部分代碼我們都很熟悉,只是在最后加了兩個選項來選擇升序還是降序。我們來看事件處理:
  sub dg_sort(sender as object, e as DataGridSortCommandEventArgs)
  Dim sortby = Request.Form("sortby")
  Dim dtable as DataTable = ds.Tables("users")
  Dim dview as new DataView(dtable)
  If sortby = "Ascending" Then
  dview.sort = e.SortExpression.ToString & " ASC"
  Else If sortby = "Descending" Then
  dview.sort = e.SortExpression.ToString & " DESC"
  End If
  dg.DataSource = dview
  dg.databind()
  end sub

事件先查看用戶選擇,然后根據用戶選擇來處理排序方式。圖示如下:

總結

以上所有章節介紹了ASP.NET數據庫處理,雖然簡單,但是應該還是可以給讀者一些幫助的。需要注意的是,數據庫處理還有很多其他方面沒有介紹,在使用過程中需要我們不斷學習。


上一篇:ASP.NET數據庫編程

下一篇:ADO.NET入門

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品一区精品二区| 成人激情综合网| 亚洲性日韩精品一区二区| 久久久久久网站| 97国产精品人人爽人人做| 51精品在线观看| 中文字幕久热精品视频在线| 日韩av在线免播放器| 日韩精品久久久久久久玫瑰园| 亚洲欧美中文字幕| 97色在线观看免费视频| 中文字幕亚洲一区在线观看| 97精品欧美一区二区三区| 国产欧美va欧美va香蕉在线| 亚洲成**性毛茸茸| 国产精品尤物福利片在线观看| 午夜精品一区二区三区在线播放| 国产一区二区三区日韩欧美| 久久久国产91| 亚洲国产又黄又爽女人高潮的| 国产mv久久久| 国产剧情久久久久久| xxav国产精品美女主播| 欧美极品欧美精品欧美视频| 亚洲高清色综合| 国产一区二区黑人欧美xxxx| 欧美专区第一页| 成人中文字幕在线观看| 激情av一区二区| 日韩美女主播视频| 国产成人精品免高潮在线观看| 亚洲精品www久久久| 羞羞色国产精品| 日韩免费中文字幕| 亚洲xxxxx电影| 日韩美女免费视频| 97视频在线观看播放| 亚洲精品福利在线| 97精品一区二区三区| 亚洲最大在线视频| 美女黄色丝袜一区| 日韩中文字幕在线| 日韩欧美在线播放| 高清欧美性猛交xxxx黑人猛交| 日韩精品免费观看| 精品中文字幕在线2019| 一区二区三区在线播放欧美| 97视频在线观看成人| 成人妇女淫片aaaa视频| 国产亚洲欧美日韩一区二区| 一区二区三区视频在线| 九九久久久久99精品| 大荫蒂欧美视频另类xxxx| 日韩电影网在线| 欧美精品videos另类日本| 久久久在线观看| 日韩免费在线电影| 91美女片黄在线观| 国产精品吴梦梦| 欧美一级在线亚洲天堂| 国产精品27p| 国产亚洲欧洲高清| 国产精品91视频| 黑人巨大精品欧美一区二区三区| 久久精品99久久久久久久久| 91在线视频一区| 亚洲国产精品久久久久| 国产精品你懂得| 国产精品亚洲精品| 欧美精品久久久久久久| 神马久久桃色视频| 国语自产精品视频在免费| 久久99亚洲精品| 久久频这里精品99香蕉| 日韩中文字幕av| 久热国产精品视频| 欧美国产视频一区二区| 欧美国产日韩xxxxx| 日韩暖暖在线视频| 中文字幕日韩视频| 久久九九全国免费精品观看| 亚洲天堂一区二区三区| 欧美日韩亚洲成人| 17婷婷久久www| 91久久精品视频| 国产香蕉一区二区三区在线视频| 欧美日韩不卡合集视频| 日韩av手机在线| 亚洲精品v天堂中文字幕| 国产成人aa精品一区在线播放| 精品国产欧美一区二区三区成人| 久久久欧美一区二区| 少妇激情综合网| 日韩中文字幕在线精品| 欧美成人免费在线观看| 欧美影院成年免费版| 国产亚洲aⅴaaaaaa毛片| 国产精品中文字幕久久久| 亚洲乱码国产乱码精品精天堂| 中文字幕国产精品| 亚洲性日韩精品一区二区| 国产精品久久久久久久av电影| 国产精品网址在线| 在线日韩日本国产亚洲| 91视频免费在线| 国产综合福利在线| 欧美成人精品在线视频| 欧美黄色成人网| 欧美人与物videos| 国产欧美日韩高清| 欧美精品www| 亚洲精品资源美女情侣酒店| 中文字幕亚洲在线| 亚洲欧洲第一视频| 久久九九精品99国产精品| 精品国产欧美一区二区三区成人| 青青草国产精品一区二区| 欧美激情精品久久久久久变态| 亚洲综合在线中文字幕| 美女福利视频一区| 97国产精品视频人人做人人爱| 亚洲欧美日韩精品久久| 日韩av片免费在线观看| 亚洲精品99久久久久中文字幕| 日本午夜人人精品| 国外成人在线播放| 色av中文字幕一区| 欧美日韩国产综合视频在线观看中文| 欧美日韩第一视频| 国产suv精品一区二区三区88区| 黑人与娇小精品av专区| 中文欧美日本在线资源| 亚洲国产精品成人精品| 中文字幕精品www乱入免费视频| 成人写真福利网| 红桃视频成人在线观看| 欧美视频不卡中文| 最新91在线视频| 国产精品18久久久久久首页狼| 欧美激情精品久久久久久黑人| 亚洲成av人乱码色午夜| 欧美激情一区二区三区高清视频| 色综合久久悠悠| 成人亚洲综合色就1024| 欧美尺度大的性做爰视频| 国产精品第2页| 成人h猎奇视频网站| 成人黄色短视频在线观看| 日韩影视在线观看| 国产精品扒开腿做爽爽爽视频| 日韩视频一区在线| 大量国产精品视频| 日韩中文字幕免费视频| 国产精品成av人在线视午夜片| 国产精品27p| 国产69精品久久久久99| 伦理中文字幕亚洲| 日韩一区二区在线视频| 精品自在线视频| 91色在线视频| 亚洲精品久久久久久久久久久| 91精品国产高清自在线| 国产日韩欧美中文在线播放| 国产精品视频网站|