| 導購 | 订阅 | 在线投稿
分享
 
 
 

用 DataSet 對象更新數據

來源:互聯網  2008-06-01 01:10:43  評論

這個是我新做的一個小站,宗旨爲「beginner to beginner」,因爲我也是初學者:) 裏面的「心得體會」 都是我自己寫的。

大家知道,DataSet保存的數據是位于服務器內存裏面的原數據庫的「副本」。所以用DataSet更新數據的過程就是先對「副本」進行更新,然後在將「原本」更新,按照我的理解就是把「原本」覆蓋掉。具體到過程,首先是要找到需要更新的行,然後賦新值,最後更新原數據庫。

要找到需要修改的行,比較方便的做法就是根據記錄中的某個值進行查找,這樣比用「列號」「行號」什麽的方便多了。要做到這一點,首先就是要給數據庫指定一個主鍵,然後即可按照主鍵進行查找。要注重的是這個主鍵必須要是在程序中指定的,並且這個主鍵不一定和你數據庫原來有的主鍵一樣。

然後就是最後的更新,當然是用DataAdapter的Update()方法借助CommandBuilder來實現,要注重的是,假如你的數據庫一開始沒有定義主鍵,那進行更新的時候會出錯,返回的錯誤將是「對于不返回任何鍵列信息的 SelectCommand 不支持 UpdateCommand 的動態 SQL 生成。」這是因爲我們用的Update()實際上是通過CommandBuilder動態生成sql語句,然後才進行的數據庫操作。但假如你在一開始創建DataAdapter時的那個sql語句沒有包含有主鍵的列的話,那CommandBuilder將不會發生作用。這一點是必須要牢記的。

說了這麽多,假如有不明白的就看下面的程序,這個是我練習時寫的,裏面有一些個人的設定,比如記錄名什麽的,相信大家一看就明白。代碼拷貝框

<%@import namespace="System.Data"%>

<%@import namespace="System.Data.OleDb"%>

<script language="c#" runat="server">

//定義處理更新的方法

//因爲是簡單示例,所以這個程序已經簡化,直接進行更新

//這裏有兩個參數,第一個用來查找需要更新的行,第二個是要修改的值

private void up_date(int ids,string names){

//連接字符串,不明白的可以看本專題第二篇文章

string connstr=ConfigurationSettings.AppSettings["color"];

OleDbConnection conn=new OleDbConnection(connstr);

string sql="select * from member";

OleDbDataAdapter ada=new OleDbDataAdapter(sql,conn);//建立一個DataAdapter對象

//這裏的CommandBuilder對象一定不要忘了,一般就是寫在DataAdapter定義的後面

OleDbCommandBuilder cb=new OleDbCommandBuilder(ada);

DataSet ds=new DataSet();//建立DataSet對象

conn.Open();//打開連接

ada.Fill(ds,"mems");//填充DataSet

conn.Close();//注重及時關閉連接

DataTable dt=ds.Tables["mems"];//建立一個DataTable對象,方便操作

dt.PrimaryKey=new DataColumn[]{dt.Columns["id"]};//建立一個主鍵

DataRow dr=dt.Rows.Find(ids);//根據參數查找到需要修改的行

dr["name"]=names;//對需要修改的記錄賦新值

ada.Update(ds,"mems");//用DataAdapter的Update()方法進行數據庫的更新

}

//定義用來響應按鈕單擊事件的方法

private void b1_Click(object sender,System.EventArgs e){

if(Page.IsValid){

int ids=Int32.Parse(idst.Text);//取得要修改的行的id值,並轉換成int類型

string names=namest.Text;//取得新值

up_date(ids,names);//調用我們定義的方法處理

lb1.Text="ok!";

</script>

<Html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>用dataset更新記錄</title>

</head>

<body>

<ASP:Label id="lb1" runat="server"/>

<form runat="server">

<asp:TextBox id="idst" runat="server"/>

<asp:RequiredFieldValidator id="rfv1" ControlToValidate="idst" ErrorMessage="error!" runat="server"/>

<asp:TextBox id="namest" runat="server"/>

<asp:RequiredFieldValidator id="rfv2" ControlToValidate="namest" ErrorMessage="error!" runat="server"/>

<asp:Button id="b1" Text="here!!" OnClick="b1_Click" runat="server"/>

</form>

</body>

</html>

[Ctrl+A 全部選擇 然後拷貝]

這個是我新做的一個小站,宗旨爲「beginner to beginner」,因爲我也是初學者:) 裏面的「心得體會」 都是我自己寫的。 大家知道,DataSet保存的數據是位于服務器內存裏面的原數據庫的「副本」。所以用DataSet更新數據的過程就是先對「副本」進行更新,然後在將「原本」更新,按照我的理解就是把「原本」覆蓋掉。具體到過程,首先是要找到需要更新的行,然後賦新值,最後更新原數據庫。 要找到需要修改的行,比較方便的做法就是根據記錄中的某個值進行查找,這樣比用「列號」「行號」什麽的方便多了。要做到這一點,首先就是要給數據庫指定一個主鍵,然後即可按照主鍵進行查找。要注重的是這個主鍵必須要是在程序中指定的,並且這個主鍵不一定和你數據庫原來有的主鍵一樣。 然後就是最後的更新,當然是用DataAdapter的Update()方法借助CommandBuilder來實現,要注重的是,假如你的數據庫一開始沒有定義主鍵,那進行更新的時候會出錯,返回的錯誤將是「對于不返回任何鍵列信息的 SelectCommand 不支持 UpdateCommand 的動態 SQL 生成。」這是因爲我們用的Update()實際上是通過CommandBuilder動態生成sql語句,然後才進行的數據庫操作。但假如你在一開始創建DataAdapter時的那個sql語句沒有包含有主鍵的列的話,那CommandBuilder將不會發生作用。這一點是必須要牢記的。 說了這麽多,假如有不明白的就看下面的程序,這個是我練習時寫的,裏面有一些個人的設定,比如記錄名什麽的,相信大家一看就明白。代碼拷貝框 <%@import namespace="System.Data"%> <%@import namespace="System.Data.OleDb"%> <script language="c#" runat="server"> //定義處理更新的方法 //因爲是簡單示例,所以這個程序已經簡化,直接進行更新 //這裏有兩個參數,第一個用來查找需要更新的行,第二個是要修改的值 private void up_date(int ids,string names){ //連接字符串,不明白的可以看本專題第二篇文章 string connstr=ConfigurationSettings.AppSettings["color"]; OleDbConnection conn=new OleDbConnection(connstr); string sql="select * from member"; OleDbDataAdapter ada=new OleDbDataAdapter(sql,conn);//建立一個DataAdapter對象 //這裏的CommandBuilder對象一定不要忘了,一般就是寫在DataAdapter定義的後面 OleDbCommandBuilder cb=new OleDbCommandBuilder(ada); DataSet ds=new DataSet();//建立DataSet對象 conn.Open();//打開連接 ada.Fill(ds,"mems");//填充DataSet conn.Close();//注重及時關閉連接 DataTable dt=ds.Tables["mems"];//建立一個DataTable對象,方便操作 dt.PrimaryKey=new DataColumn[]{dt.Columns["id"]};//建立一個主鍵 DataRow dr=dt.Rows.Find(ids);//根據參數查找到需要修改的行 dr["name"]=names;//對需要修改的記錄賦新值 ada.Update(ds,"mems");//用DataAdapter的Update()方法進行數據庫的更新 } //定義用來響應按鈕單擊事件的方法 private void b1_Click(object sender,System.EventArgs e){ if(Page.IsValid){ int ids=Int32.Parse(idst.Text);//取得要修改的行的id值,並轉換成int類型 string names=namest.Text;//取得新值 up_date(ids,names);//調用我們定義的方法處理 lb1.Text="ok!"; </script> <Html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>用dataset更新記錄</title> </head> <body> <ASP:Label id="lb1" runat="server"/> <form runat="server"> <asp:TextBox id="idst" runat="server"/> <asp:RequiredFieldValidator id="rfv1" ControlToValidate="idst" ErrorMessage="error!" runat="server"/> <asp:TextBox id="namest" runat="server"/> <asp:RequiredFieldValidator id="rfv2" ControlToValidate="namest" ErrorMessage="error!" runat="server"/> <asp:Button id="b1" Text="here!!" OnClick="b1_Click" runat="server"/> </form> </body> </html> [Ctrl+A 全部選擇 然後拷貝]
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有