QQ交流群:13033480
如果我說,類就是一個人,你會信嗎?
讓我們來看看,你是怎么打開數據庫的...
一、打開和關閉數據庫
你需要知道這么幾個信息:你要連接的是哪台機器(機器名:SPXY-WYH);你要采取什么身份驗證方式(Window身份驗證方式,還是SQL Server身份驗證方式);如果你是個負責任的人,你還需要知道你要連接哪個數據庫(NetShop)。好了,我可以用字符串的方式告訴你嗎?
1、連接字符串
string connectionString = "Server=SPXY-WYH;Database=NetShop;Trusted_Connection=SSPI";
string connectionString = "Server=.SPXY-WYH;Database=NetShop;User Id=abc;Password=123";
你應該明白,我兩個連接字符串的意思吧?
第一個,是讓你用Windows身份驗證方式打開數據庫,機器名是SPXY-WYH,要連接的數據庫是NetShop;
第二個,是讓你用SQL Server身份驗證方式打開數據庫,機器名是SPXY-WYH,要連接的數據庫是NetShop。你知道的,用這種方式打開數據庫,是需要知道用戶名和密碼的.....
2、數據庫的打開與關閉
那,我們再看看,類SqlConnection是怎么打開數據庫的:
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Server=SPXY-WYH;Database=NetShop;Trusted_Connection=SSPI";
conn.Open();
conn.Close();
我們把剛才告訴你的連接字符串,告訴給了一個叫SqlConnection的人,然后,它就可以很乖地聽我們的指令,隨時打開、關閉數據庫了。
什么,你說不對??“你明明告訴的是一個叫conn的類的實例,不是SqlConnection類嘛......”
是的,不錯,你說得對,我告訴的是conn。可是,你知道conn是個什么人嗎?他是一個克隆人。
你可能認識一個人,他非常厲害,甚至能呼風換雨,但是,他不一定會聽你的,隨意讓你使喚;而我的類就不一樣了,我發現了SqlConnection很有用,很有價值,具有打開和關閉一個數據庫的能力,我就克隆了一個,這樣,他就會完全屬於我,非常非常乖地聽我的話了,我讓他什么時候打開數據庫,他就什么時候打開;我讓他什么時候關閉,他也會老老實實地去關閉......
我們必須重溫一下,變量是什么?例如int i=1;這是什么意思?SqlConnection conn = new SqlConnection();這又是什么意思?
計算機不是數學,此變量,非彼變量也。譚浩強在《C語言程序設計》一書中明確指出,“變量是儲存單元”,隨着變量,特別是自定義變量越來越復雜,我更喜歡說,“變量,是一個存儲區域”。int i=1,事實上就是,我們開辟一個存儲區域,把用32位0、1代碼表示的整數1,放到這個存儲區域中,然后,隨時可以通過它的名字i或者它的地址&訪問它;而SqlConnection conn = new SqlConnection();則是開辟一個存儲區域,把類SqlConnection封裝的用一堆0、1代碼表示的變量、函數統統都放到這個存儲區域中,然后,我們隨時都可以通過conn這個名字訪問它,讀取或設置它的屬性,也就是它里面的變量值、調用它里面的方法函數....
一直以來,大家都喜歡用“實例化”來描述這個過程,而我,則更喜歡說,這是聲明一個變量,一個其實並不算怎么特殊的復合型變量,一個類變量,也就是比結構體復雜一點而已,除了里面有變量,還會有函數。
如果我說,類就是一個人,你不覺得,這其實就是在克隆一個人嗎?
你不是克隆人,所以,你有權利不聽我的話,你可以說我今天不心情不好,不喜歡做一個打開數據庫這么一個無聊的操作,更不喜歡那么費事兒地,在打開數據庫的同時,還幫我指定要操作的數據庫,你還有可能心不在焉地幫我犯兩個操作小錯誤,從而不能很好地完成這個操作。
我的克隆人不會讓我失望的,他是我的,他完完全全是我的,他非常非常聽我的話,也非常非常地敬業,每次打開數據庫之后,還能不厭其煩地,幫我把數據庫關閉,因為,這是一個必須的良好習慣。
二、執行查詢命令並顯示查詢結果
打開數據庫,總要做點事,我們來查詢點什么吧,我們換一個人,找個叫SqlCommand的人做這件事兒怎么樣?
按照你在查詢分析器上執行一個查詢命令的需要,我需要告訴她這么三樣東西:
1、針對哪個機器上的哪個數據庫,簡單一點,就直接告訴她是剛才克隆人conn打開的那個連接吧;
2、是什么類型的命令,是存儲過程,還是直接用文本形式的SQL語句,還是...;
3、如果是用存儲過程查,我需要告訴她存儲過程名是什么,如果是SQL語句查,我需要告訴她SQL語句的內容。
你看我這樣告訴她行不行?
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = cmdText;
看出來了吧,這個她,也是我克隆出來的,我命令她給我執行一個可以獲得一個表格數據的命令,把查到的表格數據交給另一個叫“rdr”的克隆人來管理,她肯定不會有意見的:
SqlDataReader rdr = cmd.ExecuteReader();
今天就到這里吧,SQL Server.NET數據提供程序,也就是System.Data.SqlClient命名空間里的4個核心的類,我們就這樣簡簡單單、隨隨便便地熟悉了2個,認識了1個,你還想說,編程這東西,很難嗎?如果我順便告訴你一聲,我們即將打造的肯德基訂餐系統,根本就不使用SqlDataAdapter,更不使用這家伙一般都要關聯使用的DataSet,你不要驚訝哈,這么一會兒功夫,就這么一會兒功夫哈......
類就是一個人,一個可以做某類事兒的人,命令一個類做件什么事,就象命令一個人做件事一樣,不管你信不信,我反正是信了......
三、以類為單位的編程思想
ASP.NET(C#),就是這樣,以類為單位,使用一個一個已經具有相當功能的類來構建項目、系統的。不僅C#是這樣的,VB、VC、Java、Delphi等等,高級語言,都是這樣以類為單位編程的。做為他們的主人,你要做的,就是從零開始,象伯樂一樣,今天發現一個類,明天認識一個類,后天又熟悉一個類。象韓信用兵一樣,多多益善,相信你也會從奴隸到將軍,威風八面的。