寧雪梅
(廣西英華國際職業(yè)學院 廣西壯族自治區(qū)欽州市 535000)
隨著計算機高速發(fā)展,使用計算機技術(shù)對數(shù)據(jù)進行管理與共享已經(jīng)廣泛應(yīng)用在各行各業(yè)中, 而設(shè)計與開發(fā)各種管理系統(tǒng),需要借助數(shù)據(jù)庫訪問技術(shù)對數(shù)據(jù)庫進行訪問。其中ADO.NET是微軟提供的一個工具,可以幫助開發(fā)人員在程序中使用SQL語句來操作數(shù)據(jù),將SQL語句交給ADO.NET的相關(guān)對象,由該對象負責與數(shù)據(jù)庫進行溝通來執(zhí)行相關(guān)的操作。由于ADO.NET技術(shù)在操作上簡單和容易上手,從而被越來越多的軟件開發(fā)人員所青睞。 接下來本文將以倉庫管理系統(tǒng)為例,給出ADO.NET技術(shù)實現(xiàn)訪問SQL Server 數(shù)據(jù)庫的一般方法和步驟。
為了能在 .NET 平臺訪問SQL Server數(shù)據(jù)庫,ADO.NET 提供了五大對象來操作數(shù)據(jù)庫中的數(shù)據(jù) ,分別有SqlConnection類、SqlCommand類、SqlDataReader類、SqlDataAdapter類、DataSet類,這些基本的常用類使用方法如下:
SqlConnection類:該類用于創(chuàng)建數(shù)據(jù)庫連接對象,將應(yīng)用程序的用戶界面與后臺的數(shù)據(jù)庫聯(lián)系起來,其一般語法格式如下所示:
SqlConnection con=new SqlConnection("server=服務(wù)器名稱;database=數(shù)據(jù)庫名稱;uid=用戶名;pwd=密碼 ");
說明:上述代碼中,Server表示需要訪問的服務(wù)器地址,其值可以是IP地址、計算機名稱、“l(fā)ocalhost”或“.”;uid和pwd分別表示使用SQL Server身份驗證登錄的用戶名和密碼,database表示需訪問的數(shù)據(jù)庫名稱。
SqlCommand類:該類用于創(chuàng)建執(zhí)行SQL語句的對象,該對象用來執(zhí)行 SQL 命令并將結(jié)果返回,該對象有ExecuteNonQuery()、ExecuteScalar()、ExecuteReader() 3種返回結(jié)果方法,不能隨意使用。如果執(zhí)行SQL語句后返回的結(jié)果為1個值時,使用ExecuteNonQuery()方法;如果執(zhí)行SQL語句后返回的結(jié)果為首行首列的值時,使用ExecuteScalar()方法;如果執(zhí)行SQL語句后返回的結(jié)果為多條記錄或者1條記錄的值時,使用ExecuteReader()方法。其語法格式如下:
string cmdStr ="select * from Student";
SqlCommand = new SqlCommand(cmdStr,con);
說明:在使用SqlCommand對象時有兩個參數(shù),其中第一個參數(shù)是需要執(zhí)行的SQL語句,第二個參數(shù)是數(shù)據(jù)庫連接對象con。
SqlDataReader類:該類用于創(chuàng)建一個查詢一條或多條數(shù)據(jù)的對象,即此對象是用來存儲一條或多條數(shù)據(jù)的結(jié)果集。通過調(diào)用SqlCommand對象cmd的ExecuteReader()方法,將查詢到的結(jié)果以SqlDateReader類型對象返回。其語法格式如下:
SqlCommand cmd = new SqlCommand(cmdStr,con); //連接好數(shù)據(jù)庫后執(zhí)行SQL語句
SqlDataReader reader = cmd.ExecuteReader(); //調(diào)用SqlCommand對象cmd的ExecuteReader()方法并將返回結(jié)果賦給SqlDateReader類型的對象reader
說明:該方法訪問數(shù)據(jù)庫為在線式訪問數(shù)據(jù)庫的方法,對數(shù)據(jù)庫的操作始終與數(shù)據(jù)庫保持連接。SqlDateReader對象可以使用read()方法實現(xiàn)按行逐個讀取返回的數(shù)據(jù)進行相關(guān)的操作。
SqlDataAdapter類與DataSet類:其中SqlDataAdapter類用于創(chuàng)建檢索和保存數(shù)據(jù)的對象,DataSet類用于創(chuàng)建一個本地數(shù)據(jù)存儲對象。這兩個類一般配合一起使用,DataSet對象用于存儲SqlDataAdapter對象的數(shù)據(jù),且DataSet對象相當于本地內(nèi)存,數(shù)據(jù)可以長久保存。其語法格式如下:
SqlCommand cmd = new SqlCommand(cmdStr,con); //連接好數(shù)據(jù)庫后執(zhí)行SQL語句
SqlDataAdapter adapter = new SqlDataAdapter(cmd); //將數(shù)據(jù)保存至SqlDataAdapter適配器對象adapter中
DataSet ds = new DataSet();//創(chuàng)建DataSet對象即本地存儲數(shù)據(jù)庫
adapter.Fill(ds);//用DataSet對象保存SqlDataAdapter對象保存的數(shù)據(jù)
說明:此方法訪問數(shù)據(jù)庫為離線式訪問數(shù)據(jù)庫,數(shù)據(jù)庫中的數(shù)據(jù)被搬至內(nèi)存進行操作,操作完成后再更新數(shù)據(jù)庫中的數(shù)據(jù)。
下面以倉庫管理系統(tǒng)為例,給出了ADO.NET技術(shù)實現(xiàn)訪問SQL Server 數(shù)據(jù)庫的一般方法和步驟。
ADO.NET技術(shù)訪問SQL Server 數(shù)據(jù)庫的第一步是設(shè)計和創(chuàng)建好倉庫管理系統(tǒng)的數(shù)據(jù)庫,本系統(tǒng)是要完成倉庫管理系統(tǒng), 根據(jù)我們前期的市場調(diào)研,倉庫管理系統(tǒng)數(shù)據(jù)庫Store應(yīng)包含的數(shù)據(jù)表有商品表Gooks、管理員表Managements、顧客表customers 、商品分類表GooksId共4個表。
在SQL Server 中創(chuàng)建好倉庫管理系統(tǒng)數(shù)據(jù)庫 Store及相應(yīng)的數(shù)據(jù)表后,就可以在.NET 平臺使用ADO.NET技術(shù)訪問管理系統(tǒng)的數(shù)據(jù)庫 Store,其步驟如下:
3.2.1 安裝和導入命名空間
為了能使用 ADO.NET 中相應(yīng)的類訪問數(shù)據(jù)庫, 需導入相應(yīng)的命名空間:導入語句為:using System.Data 和using System.Data.SqlClient。 注意:用vs2019創(chuàng)建 .Net Core下的C#控制臺程序沒有自動添加System.Data和System.Data.SqlClient的引用,需要用在NuGet包管理器手動添加(添加的方法:“工具”--“NuGet包管理器(N)”--“程序包管理器控制臺”,然后在左下方光標閃爍處輸入命令為“ Install-Package System.Data.SqlClient”--輸入完成后按回車鍵,等待下載添加完成后左邊解決方案Store項目的依賴項里會多出“System.Data.SqlClient”引用。
3.2.2 使用 SqlConnection 對象連接倉庫管理系統(tǒng)數(shù)據(jù)庫
為了能夠訪問倉庫管理系統(tǒng)的數(shù)據(jù)庫,導入完命名空間后接下來需要建立數(shù)據(jù)庫連接,我們可以使用 ADO.NET 的 SqlConnection類來完成數(shù)據(jù)庫的連接。 下面是使用 Sql Connection 類創(chuàng)建對象與前面設(shè)計且創(chuàng)建好的數(shù)據(jù)庫Stroe相連接的現(xiàn)實代碼:
Public SqlConnection con = new SqlConnection ("server=localhost;uid=sa;pwd=123456;database=Store"); //創(chuàng)建數(shù)據(jù)庫連接對象
3.2.3 使用SqlDataReader、SqlDataAdapter、DataSet 3個對象操縱數(shù)據(jù)庫數(shù)據(jù)
建立好圖書數(shù)據(jù)庫的連接之后, 我們可以通過創(chuàng)建SqlCommand 對 象 執(zhí) 行 SQL語句,然后使用SqlDataReader 類對象或者配合使用SqlDataAdapter類對象與DataSet類對象對查詢到的結(jié)果記錄集進行查詢和處理。下面分別給出2種方法的實現(xiàn)方式:
(1)下面的代碼示例演示了使用SqlCommand和SqlData Reader 對象將倉庫管理系統(tǒng)中商品的所有信息顯示到頁面:
string sql = “select * from Gooks “; //首先給出需要執(zhí)行的SQL語句,查詢所有商品信息。
SqlCommand cmd = new SqlCommand(sql,con); //創(chuàng)建執(zhí)行SQL命令對象
con.open(); //打開數(shù)據(jù)庫連接
SqlDataReader reader = cmd. ExecuteReader(); //通 過 調(diào) 用SqlCommand對象cmd的ExecuteReader()方法將查詢到的數(shù)據(jù)保存在SqlDataReader對象reader中。
最后將通過循環(huán)語句和調(diào)用SqlDateReader對象的read()方法將數(shù)據(jù)綁定到要顯示商品信息的控件上即可,此類數(shù)據(jù)庫操作方式為在線式訪問方式。
(2)下面的代碼示例演示了使用SqlCommand 和配合使用SqlDataAdapter類對象與DataSet類對象將倉庫管理系統(tǒng)中商品的所有信息顯示到頁面:
string sql = “select * from Gooks “; //首先給出需要執(zhí)行的SQL語句,查詢所有商品信息。
SqlCommand cmd = new SqlCommand(sql,con); //創(chuàng)建執(zhí)行SQL命令對象
SqlDataAdapter adapter = new SqlDataAdapter(cmd); //創(chuàng) 建SqlDataAdapter對象適配器用于保存SqlCommand 對象cmd執(zhí)行SQL語句后返回的數(shù)據(jù)。
DataSet ds = new DataSet(); //創(chuàng)建一個存放于內(nèi)存中的數(shù)據(jù)緩存
con.open(); //打開數(shù)據(jù)庫連接
adapter.Fill(ds); //將SqlDataAdapter對象適配器的數(shù)據(jù)保存到DataSet對象中,即保存到本地內(nèi)存中
最后關(guān)閉數(shù)據(jù)庫的連接,并使用ds.Tables[0]將數(shù)據(jù)綁定到要顯示商品信息的控件上即可,此類數(shù)據(jù)庫操作方式為離線式訪問方式。
3.2.4 關(guān)閉數(shù)據(jù)庫的連接:
數(shù)據(jù)處理完畢后,需要使用 con.Close()關(guān)閉與數(shù)據(jù)庫的接連。
本文以倉庫管理系統(tǒng)為例,給出了ADO.NET技術(shù)實現(xiàn)訪問SQL Server 數(shù)據(jù)庫的一般方法和步驟,已經(jīng)通過實驗完成倉庫管理系統(tǒng)與數(shù)據(jù)庫連接部分,并且已驗證是完全可行。即本文給出了 ASP.NET 訪問SQL Server 數(shù)據(jù)庫的步驟及詳細的配置過程和最終實現(xiàn)了與數(shù)據(jù)庫的連通一般方法和步驟。對于初學者理解 ASP.NET 的工作原理,并熟練掌握ADO.NET技術(shù)實現(xiàn)訪問SQL Server數(shù)據(jù)庫的方法具有一定的現(xiàn)實指導意義。