朋友們好,總算又有時(shí)間了,搞了兩天,頭都大了!不過(guò),真的是,。NET的東西太多了,簡(jiǎn)直有一種眼花繚亂的感覺(jué),看來(lái)還是需要靜下心來(lái)慢慢測(cè)試!我的學(xué)習(xí)觀點(diǎn)就是多寫(xiě)程序,多練習(xí),你可以不去記憶那些在資料或幫助上能查到的東西,(我就沒(méi)有去記,即使是名字空間如何寫(xiě)我都是看幫助),但一定要理解了,而如何理解,最直接的方法就是通過(guò)程序來(lái)把那些東西直接展示在眼前!
好了,不多說(shuō)了,接著上次的東西,我們繼續(xù)來(lái)看看,如何在。NET中操作數(shù)據(jù)庫(kù)(數(shù)據(jù)庫(kù)采用ACCESS 2000,至于SQL,我在以后有機(jī)會(huì)了在說(shuō)吧,其實(shí)如果懂了,ACCESS的話,適當(dāng)變變就可以操作SQL數(shù)據(jù)庫(kù)了!)
上次說(shuō)了如何在ADO。NET中執(zhí)行“SELECT”語(yǔ)句,這次我們看看,如何執(zhí)行“DELETE、UPDATE、INSERT”等語(yǔ)句。
我們這次同樣通過(guò)例子來(lái)看,其中我們用到了System.Data.OleDb.OleDbCommand類,其實(shí),我們?cè)谇懊鎴?zhí)行SELECT的時(shí)候也用到了!
下面我寫(xiě)出我的程序:
//修改留言本中特定的數(shù)據(jù) public Boolean UpdateNote(Notebook note) { Boolean tempvalue=false; string sqlstr="";//當(dāng)時(shí)在這里定義,是為了在出現(xiàn)異常的時(shí)候看看我的SQL語(yǔ)句是否正確 try { //用到了我前面寫(xiě)的那個(gè)得到數(shù)據(jù)庫(kù)連接的函數(shù) OleDbConnection conn = getConn(); //getConn():得到連接對(duì)象, conn.Open(); //確定我們需要執(zhí)行的SQL語(yǔ)句,本處是UPDATE語(yǔ)句! sqlstr = "UPDATE notes SET "; sqlstr += "title='" + note.title + "',"; sqlstr += "content='" + DealString(note.content) +"',"; sqlstr += "author='" + note.author + "',"; sqlstr += "email='" +note.email +"',"; sqlstr += "http='" +note.http +"'"; //sqlstr += "pic='" +note.pic +"'"; sqlstr += " where id=" + note.id; //定義command對(duì)象,并執(zhí)行相應(yīng)的SQL語(yǔ)句 OleDbCommand myCommand = new OleDbCommand(sqlstr,conn); myCommand.ExecuteNonQuery(); //執(zhí)行SELECT的時(shí)候我們是用的ExecuteReader() conn.Close();
//假如執(zhí)行成功,則,返回TRUE,否則,返回FALSE tempvalue=true; return(tempvalue); } catch(Exception e) { throw(new Exception("數(shù)據(jù)庫(kù)更新出錯(cuò):" +sqlstr + "\r" + e.Message)) ; } }
這個(gè)例子是對(duì)于特定ID好的記錄進(jìn)行UPDATE操作,具體解釋我都寫(xiě)在了程序中,其中的與數(shù)據(jù)庫(kù)有關(guān)的語(yǔ)句是try內(nèi)部的那些!
其實(shí),我們同樣可以通過(guò)上面的那種模式執(zhí)行INSERT、DELETE操作,下面我把我的程序列到下面!
/*刪除特定記錄,通過(guò)string類型的ID刪除字段,在我的程序中,我把這個(gè)函數(shù)重載了,這樣我們就可以通過(guò)INT類型的ID參數(shù)來(lái)刪除特定的字段了*/ public Boolean DelNote(string delid) { Boolean tempvalue=false; string sqlstr=""; //連接數(shù)據(jù)庫(kù) try { OleDbConnection conn = getConn(); //getConn():得到連接對(duì)象 conn.Open();
sqlstr = "delete * from notes where id=" + delid;
//定義command對(duì)象,并執(zhí)行相應(yīng)的SQL語(yǔ)句 OleDbCommand myCommand = new OleDbCommand(sqlstr,conn); myCommand.ExecuteNonQuery(); conn.Close();
//假如執(zhí)行成功,則,返回TRUE,否則,返回FALSE tempvalue=true; return(tempvalue); } catch(Exception e) { throw(new Exception("數(shù)據(jù)庫(kù)更新出錯(cuò):" +sqlstr + "\r" + e.Message)) ; } }
細(xì)心的朋友們應(yīng)該能看到,其實(shí)這個(gè)程序和上面的相比,只是哪個(gè)SQL語(yǔ)句不同而已,其他的都基本一樣的!同樣的,我們想在數(shù)據(jù)庫(kù)中插入新的記錄的時(shí)候也可以用這樣的方式,程序如下: //向留言本中添加數(shù)據(jù) public Boolean AddNote(Notebook note) {
Boolean tempvalue=false;//定義返回值,并設(shè)置初值 //下面把note中的數(shù)據(jù)添加到數(shù)據(jù)庫(kù)中! try{
OleDbConnection conn = getConn(); //getConn():得到連接對(duì)象 conn.Open();
//設(shè)置SQL語(yǔ)句 string insertstr="INSERT INTO notes(title, content, author, email, http, pic ,hits,posttime) VALUES ('"; insertstr +=note.title +"', '"; insertstr +=DealString(note.content) + "','"; insertstr +=note.author + "','"; insertstr +=note.email + "','"; insertstr +=note.http + "','"; insertstr +=note.pic + "',"; insertstr +=note.hits + ",'"; insertstr +=note.posttime +"')";
OleDbCommand insertcmd = new OleDbCommand(insertstr,conn) ; insertcmd.ExecuteNonQuery() ;
conn.Close(); tempvalue=true; } catch(Exception e) { throw(new Exception("數(shù)據(jù)庫(kù)出錯(cuò):" + e.Message)) ; } return(tempvalue); }
//處理數(shù)據(jù),在把數(shù)據(jù)存到數(shù)據(jù)庫(kù)前,先屏蔽那些危險(xiǎn)字符! public string DealString(string str) { str=str.Replace("<","<"); str=str.Replace(">",">"); str=str.Replace("\r","<br>"); str=str.Replace("\'","’"); str=str.Replace("\x0020"," "); return(str); }
//恢復(fù)數(shù)據(jù):把數(shù)據(jù)庫(kù)中的數(shù)據(jù),還原成未處理前的樣子 public string UnDealString(string str) { str=str.Replace("<","<"); str=str.Replace(">",">"); str=str.Replace("<br>","\r"); str=str.Replace("’","\'"); str=str.Replace(" ","\x0020");
return(str); }
我同時(shí)列出了兩個(gè)函數(shù)UnDealString()和DealString( ),他們是對(duì)與輸入內(nèi)容做一些事先的處理和還原工作的!
這幾個(gè)程序因?yàn)槎急容^簡(jiǎn)單,所以我就不多說(shuō)了! 其實(shí),我這樣的對(duì)數(shù)據(jù)庫(kù)操作也只是ADO。NET中的一部分,而通過(guò)DataSet來(lái)操作我現(xiàn)在還沒(méi)有仔細(xì)研究過(guò),所以我也不能寫(xiě)出什么東西來(lái),以后的這幾天我就準(zhǔn)備好好看看那個(gè)東西了,到時(shí)候,我還會(huì)把我的感受寫(xiě)出來(lái)和大家分享!
在補(bǔ)充一下,我前面用到的程序都是我在寫(xiě)一個(gè)留言本的測(cè)試程序時(shí)候用到的!如果有朋友有興趣的話,我將貼出我的全部學(xué)習(xí)代碼!
好了,我要開(kāi)始我的事情了!下次再見(jiàn)!
|