朋友們好,回家已經有10天了,總算是開始學。NET了,直接的感覺就是MS的幫助太差了,好多錯誤在上面,害的我走了好多彎路,結果好多東西還沒有完全搞好,簡直了! 由于BETA2和BETA1比較,變化太大了,而現在無論是書還是網絡上的資料基本都還停留在BETA1上,是朋友們在學習的時候遇到好多問題還無處可查,這里我把我的學習過程中遇到的一些問題和體會拿出來與大家分享,希望能給也在學習過程中的朋友有些幫助!
我估計,朋友們在學習。NET的過程中,遇到的最多的問題就是在和數據庫打交道的過程中了!所以這次我準備就從在BETA2中如何操作數據庫開始了,數據庫采用我們最常用的ACCESS數據庫(其實是學習最常用的,實際中我更喜歡SQL數據庫的)
在BETA2中,。NET提供了以下的NAMESPACE: System.Data Namespace System.Data.OleDb(和BETA1中已經不同了,所以如果拿BETA1中的程序到BETA2中來運行肯定不可以的)
如果想講清楚這些東西,我不認為是我可以作到的,所以我想通過一些具體的程序來把我們對數據庫的最基本的操作(SELECT、UPDATE、DELETE、INSERT等)演示一下,其他的還是需要朋友們在學習過程中來慢慢體會了!
要想操作一個數據庫,不論是那種操作,首先要做的肯定是打開數據庫,下面我們以ACCESS數據庫來做例子說明如何打開一個數據庫連接!在這里我們需要用到的是:System.Data.OleDb.OleDbConnection類!(如果操作SQL數據庫,我們最好使用System.Data.SqlClient.SqlConnection類)
我先寫出我自己使用的程序:
using System.Data using System.Data.OleDb
publicOleDbConnection getConn() { string connstr="Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=F:\\web\\notesbook\\class\\leavenotes.mdb"; OleDbConnection tempconn= new OleDbConnection(connstr); return(tempconn); }
相信只要使用過ADO的朋友應該都可以看懂的!我們先定義一個String類型的變量,其中存放了我們連接數據庫的連接字符串,然后在定義一個System.Data.OleDb.OleDbConnection類型的對象并實例化,最后返回這個對象!需要說明一下的是,我并沒有把語句:tempconn.Open();放到這個函數中,原因我我稍后在說明,這里只是先提醒一下!
通過上面的函數,我們就已經得到了類似于ADO中的連接對象Connection了!下面的就是具體操作數據庫了!
在具體講操作前,我認為有必要先認識一下下面的兩個類: System.Data.OleDb.OleDbDataAdapter System.Data.OleDb.OleDbDataReader
System.Data.OleDb.OleDbDataAdapter:可以直接和DataSet聯系,并操作數據源的,它的功能相對強大一些,因此也比較耗系統資源! System.Data.OleDb.OleDbDataReader:則有些類似于ADO中的哪個只讀向前的記錄集,它最常用在只需要依次讀取并顯示數據的時候,相比System.Data.OleDb.OleDbDataAdapter來說,他耗用的系統資源要小!其實,OleDbDataReader能實現的功能,OleDbDataAdapter都可以實現,不過從資源使用率的角度考慮我們應該盡量使用前者!但有些功能,卻是必須使用OleDbDataAdapter才可以實現的!
。SELECT操作! 下面是我的自己在寫測試程序的時候用到了,先列出來看看OleDbDataReader和OleDbDataAdapter是如何操作從數據庫中選擇記錄的:
//通過ID得到當前留言詳細內容.通過STRING類型參數 public Notebook getNoteFromID(string noteid) { Notebook tempnote=new Notebook();//定義返回值 try { OleDbConnection conn = getConn(); //getConn():得到連接對象 string strCom = "Select * from notes where id=" + noteid ; OleDbCommand myCommand =new OleDbCommand(strCom,conn); conn.Open(); OleDbDataReader reader; reader =myCommand.ExecuteReader() ; //執行command并得到相應的DataReader //下面把得到的值賦給tempnote對象 if(reader.Read()) { tempnote.id=(int)reader["id"]; tempnote.title=reader["title"].ToString(); tempnote.content=reader["content"].ToString(); tempnote.author=reader["author"].ToString(); tempnote.email=reader["email"].ToString(); tempnote.http=reader["http"].ToString(); tempnote.pic=reader["pic"].ToString(); tempnote.hits=(int)reader["hits"]; tempnote.posttime=(DateTime)reader["posttime"]; } else//如沒有該記錄,則拋出一個錯誤! { throw(new Exception("當前沒有該記錄!")); }
reader.Close(); conn.Close(); } catch(Exception e) { //throw(new Exception("數據庫出錯:" + e.Message)) ; } return(tempnote); //返回Databook對象 }
上面的程序就是通過OleDbDataReader來得到特定的記錄的!其中用到的語句我單獨寫到下面: OleDbConnection conn = getConn(); //getConn():得到連接對象 string strCom = "Select * from notes where id=" + noteid ;//SQL語句 OleDbCommand myCommand =new OleDbCommand(strCom,conn);//建立OleDbCommand對象 conn.Open();//注意我在前面說的Open語句在這里使用到了! OleDbDataReader reader; reader =myCommand.ExecuteReader() ; //執行command并得到相應的結果
我在每句話后都加入了說明,其中OleDbConnection conn = getConn();就是通過我前面提到的getConn函數來得到數據庫連接的,其他語句沒有什么好說的,都很簡單,就不多說了!
我再列一個通過OleDbDataAdapter來得到記錄的例程: //Getlist():得到當前需要的留言列表 public DataView getNoteList() { DataView dataview; System.Data.DataSet mydataset;//定義DataSet
try { OleDbConnection conn = getConn(); //getConn():得到連接對象 OleDbDataAdapter adapter = new OleDbDataAdapter(); string sqlstr="select * from notes order by posttime desc"; mydataset= new System.Data.DataSet(); adapter.SelectCommand = new OleDbCommand(sqlstr, conn); adapter.Fill(mydataset,"notes"); conn.Close(); } catch(Exception e) { throw(new Exception("數據庫出錯:" + e.Message)) ; } dataview = new DataView(mydataset.Tables["notes"]); return(dataview); }
這個程序或許有些復雜,同樣的,我還是先把那些關鍵語句列出,并說明:
OleDbConnection conn = getConn(); //通過函數getConn()得到連接對象 OleDbDataAdapter adapter = new OleDbDataAdapter();//實例化OleDbDataAdapter對象 string sqlstr="select * from notes order by posttime desc";//SQL語句
mydataset= new System.Data.DataSet();//由于OleDbDataAdapter需要和DataSet結合使用,所以在這里定義了DataSet對象,其實說OleDbDataAdapter復雜,其實就是因為DataSet的緣故DataSet有些類似于ADO中的recordset 對象,但功能遠遠超過了它,而且它和數據庫是斷開的,并能存放多個記錄集!
adapter.SelectCommand = new OleDbCommand(sqlstr, conn);//設置命令為SelectCommand類型的
adapter.Fill(mydataset,"notes");//執行,并將結果添加到mydataset中的”notes”表中 conn.Close(); //關閉連接!
在對上面的程序加一些補充說明,由于getNoteLista是得到一系列記錄,并通過控件DataGrid來做分頁顯示的,所以我返回的是一個DataView類型的對象!
啊呀,太晚了,今天就到這里,我要休息了,其它幾個操作我在以后在說吧,呵呵,睡覺了!
|