用 DataSet 對象更新數據
發表時間:2024-01-21 來源:明輝站整理相關軟件相關文章人氣:
[摘要]這個是我新做的一個小站,宗旨為“beginner to beginner”,因為我也是初學者:) 里面的“心得體會” 都是我自己寫的。大家知道,DataSet保存的數據是位于服務器內存里面的原數據庫的“副本”。所以用DataSet更新數據的過程就是先對“副本”進行更新,然后在將“原本”更新,按照我...
這個是我新做的一個小站,宗旨為“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");//填充DataSetconn.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 全部選擇 然后拷貝]