国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C#程序設(shè)計(jì)課程數(shù)據(jù)庫編程技術(shù)教學(xué)研究

2020-05-13 14:15:23高賢君楊元維
電腦知識(shí)與技術(shù) 2020年8期

高賢君 楊元維

摘要:針對(duì)C#程序設(shè)計(jì)數(shù)據(jù)庫編程教學(xué)中存在的數(shù)據(jù)源種類多、不理解參數(shù)化和存儲(chǔ)過程的意義和使用等問題,重新梳理知識(shí)點(diǎn),提出將實(shí)踐任務(wù)融入教學(xué),具體融合知識(shí)點(diǎn)并映射為實(shí)踐任務(wù)、實(shí)現(xiàn)理論與實(shí)踐一體化教學(xué),該教學(xué)方式有助于培養(yǎng)學(xué)生編程思維和實(shí)踐能力。

關(guān)鍵詞:C#;數(shù)據(jù)庫編程;soL;存儲(chǔ)過程;DataAdapter

中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1009-3044(2020)08-0165-03

《C#程序設(shè)計(jì)》課程是筆者所在專業(yè)——GIS專業(yè)一門專業(yè)必修課,一般開設(shè)在大學(xué)本科期間第三學(xué)期,共計(jì)72(理論52+實(shí)踐20)學(xué)時(shí)。本課程先修課程包括《計(jì)算機(jī)基礎(chǔ)》《數(shù)據(jù)結(jié)構(gòu)》與《C程序設(shè)計(jì)》等計(jì)算機(jī)類課程[1-2],由于GIS專業(yè)并未像計(jì)算機(jī)專業(yè)一樣單獨(dú)開設(shè)《面向?qū)ο蟪绦蛟O(shè)計(jì)》與《程序設(shè)計(jì)方法學(xué)》等課程,在教學(xué)時(shí)需涵蓋這兩門課程的基本內(nèi)容[3]。數(shù)據(jù)庫編程部分屬于本課程第十二章內(nèi)容,筆者選用的李正夫等編著的《C#程序設(shè)計(jì)實(shí)用教程》教材中章節(jié)名稱為《ADO.NET》,ADO(ActiveX Data Objects.ActiveX數(shù)據(jù)對(duì)象)屬于.NET平臺(tái)的數(shù)據(jù)庫編程組件庫,調(diào)用該組件可實(shí)現(xiàn)對(duì)各主流數(shù)據(jù)庫的連接、數(shù)據(jù)查詢、讀寫、刪除等操作。

數(shù)據(jù)庫編程技術(shù)是一項(xiàng)非常重要的程序設(shè)計(jì)技術(shù),它幾乎應(yīng)用于所有的應(yīng)用系統(tǒng)之中[5-6],因此是一項(xiàng)必須重點(diǎn)掌握的技能。然而,由于不同數(shù)據(jù)庫服務(wù)提供商之間連接、讀取數(shù)據(jù)各有差異,需要適當(dāng)?shù)臄?shù)據(jù)庫驅(qū)動(dòng)程序支持,讀取數(shù)據(jù)的過程也略有差異。因此,該部分內(nèi)容雖然知識(shí)點(diǎn)不多但內(nèi)容有深度,且涉及的類、接口比較多,造成學(xué)生難以掌握數(shù)據(jù)庫編程技術(shù)[7-8]。

1 目前數(shù)據(jù)庫編程教學(xué)中存在的問題

f1)數(shù)據(jù)源種類多,不同數(shù)據(jù)源連接和讀取有一定的差異

ADO.NET中提供OLE DB、ODBC、SQL Server和Oracle四種數(shù)據(jù)程序,而四種類型又分別包含四個(gè)常用類對(duì)象類型,分別是Connection、Command、DataReader、DataAdapter對(duì)象,其中各對(duì)象之間又包含多種屬性和方法。在理解這部分的內(nèi)容時(shí),學(xué)生經(jīng)常會(huì)不知道應(yīng)該使用哪種類型的數(shù)據(jù)程序,也弄不清如何使用這些常用對(duì)象和其方法。

(2)參數(shù)化的作用和意義理解不深入

Command對(duì)象執(zhí)行的結(jié)構(gòu)化查詢語言(Structured QueryLanguage。SQL),可以視為將soL語句傳遞給數(shù)據(jù)庫系統(tǒng)中,然后該系統(tǒng)執(zhí)行后將結(jié)果返回給客戶端,而在此過程中,為了防止數(shù)據(jù)庫注入,常對(duì)soL語句采用參數(shù)化方式,提升安全性。然而在實(shí)際教學(xué)中,筆者發(fā)現(xiàn),學(xué)生對(duì)該部分內(nèi)容的作用和意義的理解不深人,并且存在“學(xué)過但不會(huì)用”的情況。

(3)存儲(chǔ)過程不理解,更不知道該如何使用

存儲(chǔ)過程(Stored Procedure)是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的soL語句集,它存儲(chǔ)在數(shù)據(jù)庫中,一次編譯后永久有效,用戶通過指定存儲(chǔ)過程的名字并給出參數(shù)來執(zhí)行它。存儲(chǔ)過程是數(shù)據(jù)庫中的一個(gè)重要對(duì)象。然而,對(duì)于使用存儲(chǔ)過程的意義和執(zhí)行效率不甚了解,在其看來,使用soL語句能夠?qū)崿F(xiàn)同樣的效果,為什么需要用存儲(chǔ)過程?如何調(diào)用存儲(chǔ)過程完成特定的操作。

2 重新梳理知識(shí)點(diǎn),突出實(shí)踐教學(xué)

針對(duì)以上問題,需對(duì)數(shù)據(jù)庫編程技術(shù)教學(xué)知識(shí)點(diǎn)進(jìn)行重新梳理,突出實(shí)踐能力的培養(yǎng),改進(jìn)以往填鴨式教學(xué)模式,確立教學(xué)主線,引導(dǎo)學(xué)生積極完成實(shí)踐任務(wù),通過實(shí)踐加深對(duì)數(shù)據(jù)庫編程知識(shí)點(diǎn)的理解,提升學(xué)以致用,以用促學(xué)。

通過梳理知識(shí)點(diǎn),構(gòu)建C#中數(shù)據(jù)庫編程中主要常用Con-nection、Command、DataReader、DataAdapter對(duì)象之間的邏輯圖,如圖l所示,從數(shù)據(jù)庫到應(yīng)用程序,需要先連接數(shù)據(jù)庫,然后裝配好Command對(duì)象并進(jìn)行執(zhí)行,將獲取數(shù)據(jù)以適當(dāng)?shù)姆绞竭M(jìn)行存放,并將數(shù)據(jù)提供給應(yīng)用程序。

在該部分內(nèi)容解決時(shí),預(yù)先設(shè)定好實(shí)踐任務(wù),如圖2所示,給定一個(gè)圖書信息數(shù)據(jù)庫,要求學(xué)生實(shí)現(xiàn)數(shù)據(jù)庫讀寫各功能模塊,學(xué)生需對(duì)提出的問題進(jìn)行分析,并根據(jù)數(shù)據(jù)庫編程知識(shí)點(diǎn)解決問題。此過程需要甄別核心知識(shí)點(diǎn),應(yīng)當(dāng)考慮學(xué)生實(shí)際編程能力和興趣,設(shè)置合適的實(shí)踐目標(biāo)與內(nèi)容,在完成實(shí)踐內(nèi)容后,抽選若干實(shí)踐成果由學(xué)生準(zhǔn)備PPT及講稿,上臺(tái)演示匯報(bào)成果。

2.1 Connection對(duì)象理解與實(shí)踐

Connection對(duì)象,代表與數(shù)據(jù)源進(jìn)行的唯一會(huì)話。若是應(yīng)用于客戶端/服務(wù)器(Client/Server, C/S)數(shù)據(jù)庫系統(tǒng),它等價(jià)于與服務(wù)器的實(shí)際網(wǎng)絡(luò)連接。Connection對(duì)象就像數(shù)據(jù)庫系統(tǒng)與應(yīng)用系統(tǒng)之間一座橋梁,通過架設(shè)這座橋梁實(shí)現(xiàn)數(shù)據(jù)庫與應(yīng)用系統(tǒng)之間的通訊。以連接SQL Server數(shù)據(jù)庫為例,以下列出連接字符串的主要表達(dá)形式:

(1)使用windows身份驗(yàn)證連接本地?cái)?shù)據(jù)庫

string connString= @"Data Source=DESKTOP-GVLLFG5\SQLEXPRESS; Initial Catalog=db_My-time; Integrated Security=True”;

(2)使用SQL Server身份驗(yàn)證連接制定的服務(wù)器MvServer用戶名和密碼均為sa

string connString = @”Data

Source=DESKTOP-GV—LLFG5\SQLEXPRESS; Integrated Security=false; User ID=sa;Password=sa":

f3)使用Persist SecuritV info連接本地?cái)?shù)據(jù)庫

string connString = @”Data

Source=DESKTOP-CV—LLFG5\SQLEXPRESS; Persist Security Info=true; User ID=sa;Password=sa':

(4)使用SQL Express創(chuàng)建的本地?cái)?shù)據(jù)庫,使用絕對(duì)路徑

string connString=@”Data Source=.\SQLEXPRESS; Attach-DbFilename=D:\db_Mytime.mdf; Persist Security Info=true; UserID=sa:Password=sa”:

從以上四種連接方式不難看出,在連接字符串中表達(dá)形式有明顯差異,如(1)中采用集成Windows登錄方式,這樣就無須用戶名和密碼,連接字符串中還包含“Initial CataLog”,其表示連接數(shù)據(jù)庫后的指定某個(gè)數(shù)據(jù)庫名。在實(shí)際項(xiàng)目中,僅適用于數(shù)據(jù)庫和開發(fā)應(yīng)用程序在同一臺(tái)計(jì)算機(jī)的情況。在教學(xué)過程中應(yīng)重點(diǎn)介紹(2)、(3)、(4)需用戶名、密碼登錄數(shù)據(jù)庫系統(tǒng)的情況,實(shí)際上,在工程項(xiàng)目中,應(yīng)用系統(tǒng)無論是開發(fā)過程中或投入正式運(yùn)行,大多以用戶名和密碼的形式實(shí)現(xiàn)連接數(shù)據(jù)庫。

在教學(xué)中學(xué)生們可能無法全部理解和記住所有連接字符串的形式,因此,在講解過程中需進(jìn)行總結(jié),總結(jié)這些連接字符串的一般形式“驅(qū)動(dòng)類型+數(shù)據(jù)庫實(shí)例名+用戶名+密碼+服務(wù)器地址”,以讓學(xué)生對(duì)紛繁復(fù)雜的連接字符串形式中抽象出一般形式,更容易理解連接字符串的用法。

2.2 Command對(duì)象的理解與實(shí)踐

Command對(duì)象定義了將對(duì)數(shù)據(jù)源執(zhí)行的指定命令。包含三種常用執(zhí)行方法:1)ExecuteReader,將查詢結(jié)果返回到Da-taReader對(duì)象中;2)ExecuteScalar,返回結(jié)果集中的第一行的第一列;3)ExecuteNonQuery,執(zhí)行SQL語句并返回影響的行數(shù)。Command對(duì)象包括CommandText和Parameters屬性,其中Com-mandType包括soL語句和存儲(chǔ)過程兩種;后者指的是參數(shù)集合。

注意:若使用Command對(duì)象來完成執(zhí)行查詢,需將查詢字符串傳送給Connection對(duì)象的Execute方法或Recordset對(duì)象的Open方法。但是,當(dāng)需要使命令文本具有持久性并重新執(zhí)行它,或使用查詢參數(shù)時(shí),則必須使用Command對(duì)象。

2.3 DataReader對(duì)象的理解與實(shí)踐

DataReader對(duì)象只允許以只讀、順向的方式查看其中所存儲(chǔ)的數(shù)據(jù),提供一種非常高效的數(shù)據(jù)訪問模式,同時(shí)DataRead-er對(duì)象還是一種非常節(jié)省數(shù)據(jù)庫資源的訪問對(duì)象。

DataReader對(duì)象可通過Command對(duì)象的ExecuteReader方法從數(shù)據(jù)源中檢索數(shù)據(jù)來創(chuàng)建。如圖3所示。首先創(chuàng)建Sql-Connection對(duì)象,連接到soL Server數(shù)據(jù)庫;其次創(chuàng)建SqICom-mand對(duì)象的屬性,這些對(duì)象指定soL語句在數(shù)據(jù)庫中進(jìn)行SE-LECT、INSERT、DELETE和UPDATE等數(shù)據(jù)操作;然后執(zhí)行Sql-Command對(duì)象的ExecuteReader方法執(zhí)行獲取結(jié)果,對(duì)結(jié)果進(jìn)行遍歷,獲取滿足命令執(zhí)行的所有記錄;最后關(guān)閉Reader對(duì)象和SqlConnection對(duì)象。

在教學(xué)過程中,給出典型代碼如下:

SqlCommand cmd=new SqlCommand0;//創(chuàng)建command對(duì)象

cmd.Connection= conn; //設(shè)置連接對(duì)象

cmd.CommandText= strSql;//設(shè)置要查詢的sql語句

SqlDataReader reader= cmd.ExecuteReader0; //執(zhí)行

while (reader.Read0)//必須寫這個(gè)判斷,否則會(huì)報(bào)錯(cuò)。讀取reader中的記錄,并自動(dòng)到下一條。

string name= reader[”name”//將reader對(duì)象當(dāng)前的指向行的“name”列的值讀取到字符串name中

}

reader.close0; //DataReader對(duì)象必須使用完之后關(guān)閉,否則會(huì)影響其它數(shù)據(jù)的操作。

通過以上代碼不難看出,通過DataReader對(duì)象實(shí)現(xiàn)數(shù)據(jù)流讀取,需要通過遍歷的手段獲取到數(shù)據(jù)的完整信息。調(diào)用Da-taReader對(duì)象的Read0方法逐行讀取數(shù)據(jù)。此方法返回一個(gè)布爾值,如果讀到一行記錄,返回True,否則返回False,

加入?yún)?shù)化形式和存儲(chǔ)過程形式的典型代碼。

using (SqIConnection conn= new SqIConnection(sConnection-String》 //創(chuàng)建conn連接對(duì)象

{ conn.Open0;//打開conn數(shù)據(jù)庫

using (SqICommand cmd= new SqICommand(”CreateBoard”,conn》

{

cmd.CommandType= CommandType.StoredProcedure;//以存儲(chǔ)過程的形式

cmd. Parameters. Add(”@ClassName”, SqlDbType. VarChar,50);//參數(shù)ClassName,類型varchar,長(zhǎng)度50

cmd.Parameters[”@ClassName”].Value=tbClassName.Text;

cmd. Parameters. Add(”@BoardName”, SqlDbType. VarChar,50);//參數(shù)BoardName,類型varchar,長(zhǎng)度50

cmd.Parameters[”@BoardName”].Value=tbBoardName.Text;

cmd.ExecuteNonQuery0;

通過以上代碼可以看出如何使用參數(shù)化形式和存儲(chǔ)過程來實(shí)現(xiàn)數(shù)據(jù)庫操作,該方式由于能夠防止soL注入和執(zhí)行效率高等優(yōu)點(diǎn),在實(shí)際工程項(xiàng)目中被廣泛使用。

2.4 DataAdapter對(duì)象的理解與實(shí)踐

DataAdapter表示一組soL命令和一個(gè)數(shù)據(jù)庫連接,它們用于填充DataSet和更新數(shù)據(jù)源。DataSet對(duì)象表示數(shù)據(jù)源中數(shù)據(jù)的本地副本,它是.NET Framework的一個(gè)主要?jiǎng)?chuàng)新。如圖4所示。首先創(chuàng)建SqIConnection對(duì)象,連接到SQL Server數(shù)據(jù)庫;其次創(chuàng)建SqIDataAdapter對(duì)象。該對(duì)象包含能夠指向4個(gè)Sql-Command對(duì)象的屬性;然后創(chuàng)建包含一個(gè)或多個(gè)表的DataSet對(duì)象,使用SqIDataAdapter對(duì)象,通過調(diào)用Fill方法來填充Data-Set表,在準(zhǔn)備將數(shù)據(jù)更改返回?cái)?shù)據(jù)庫時(shí),可以使用SqIData-Adapter并調(diào)用Update方法;最后關(guān)閉SqIConnection對(duì)象。

在教學(xué)過程中,給出典型代碼如下:

SqIDataAdapter DA= new SqIDataAdapter(strSQL, con);

DataSet ds= new DataSet0;//裝填

DA.Fill(ds);

dataGridViewl.DataSource= ds.Tables[0];//將獲取到的結(jié)果表綁定到dataGridVidew中

以舉例的方式解釋DataAdapter和DataSet之間的關(guān)系,若將數(shù)據(jù)庫database視為倉庫的話,那么DataAdapter就好比大貨車,DataSet就是臨時(shí)倉庫,大貨車在倉庫與臨時(shí)倉庫之間運(yùn)輸數(shù)據(jù)。

3 結(jié)束語

通過多個(gè)學(xué)期的C#程序設(shè)計(jì)課程數(shù)據(jù)庫編程技術(shù)教學(xué)實(shí)踐,在課堂上,把數(shù)據(jù)庫編程知識(shí)點(diǎn)融入實(shí)踐任務(wù)中去,加大實(shí)踐課時(shí)的投入,給學(xué)生提供參與、分享任務(wù)作品的機(jī)會(huì)。通過這一系列的措施,提升學(xué)生對(duì)數(shù)據(jù)庫編程知識(shí)點(diǎn)的理解層次和運(yùn)用能力,使學(xué)生在任務(wù)實(shí)踐中了解“學(xué)以致用”的道理,取得了良好的教學(xué)實(shí)踐效果。

參考文獻(xiàn):

[1]高賢君,楊元維,李功權(quán).面向計(jì)算思維的Web程序設(shè)計(jì)教學(xué)思考[Jl.電腦知識(shí)與技術(shù),2018,14(21):147-149.

[2]楊元維,高賢君.計(jì)算思維在WebGIS開發(fā)與應(yīng)用教學(xué)中的 研討[J].電腦知識(shí)與技術(shù),2018,14(28):106-107+115.

[3]梁紅碩.存儲(chǔ)過程在C#數(shù)據(jù)庫編程中的應(yīng)用[J].科技風(fēng),2014(1):83-83.

[4]左丹霞.C#語言開發(fā)中的數(shù)據(jù)庫編程技術(shù)分析[J].通訊世界,2015(19):252-253.

[5]洪健.C#中的數(shù)據(jù)庫編程技術(shù)研究[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2014(17):265-266.

[6]柴君.C#數(shù)據(jù)庫應(yīng)用編程探析[J].無線互聯(lián)科技,2014(7):161-162.

[7]朱立才,黃津津.C#中的數(shù)據(jù)庫編程技術(shù)[J].福建電腦,2005(08):95-96.

[8]孟燕,基于MOOC的高職“C#程序設(shè)計(jì)”在線課程開發(fā)與實(shí)踐[J].電子制作,2017(12):63-64.

【通聯(lián)編輯:王力】

收稿日期:2019-10-25

基金項(xiàng)目:地理國情監(jiān)測(cè)國家測(cè)繪地理信息局重點(diǎn)實(shí)驗(yàn)室開放基金(2016NGCM07);長(zhǎng)江科學(xué)院開放研究基金資助項(xiàng)目(CK-WV2017537/KY);長(zhǎng)江青年基金資助(2016cqn04);長(zhǎng)江大學(xué)創(chuàng)新創(chuàng)業(yè)協(xié)同育人計(jì)劃

作者簡(jiǎn)介:高賢君(1986-),女,湖北荊門人,講師,博士,主要研究方向?yàn)檫b感影像智能解譯;楊元維(1983-),男,湖北武漢人,講師,博士,主要研究方向?yàn)槭噶科ヅ洹④壽E數(shù)據(jù)匹配、遙感解譯。

黑水县| 漳平市| 苍梧县| 尼勒克县| 杭锦后旗| 抚远县| 清水河县| 察隅县| 寿宁县| 资阳市| 杭州市| 容城县| 田东县| 北辰区| 缙云县| 绵竹市| 永宁县| 柏乡县| 凤城市| 高淳县| 汤阴县| 始兴县| 汝城县| 龙口市| 淅川县| 垦利县| 湖州市| 鄄城县| 桃园县| 上杭县| 遵义县| 淳化县| 宜丰县| 安平县| 香格里拉县| 宜章县| 万荣县| 胶州市| 定安县| 海淀区| 藁城市|