亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ADO.NET基礎開發

2019-11-17 02:25:24
字體:
來源:轉載
供稿:網友

ADO.NET基礎開發

ADO.NET是微軟新一代.NET數據庫的訪問架構,ADO是ActiveX Data Objects的縮寫。ADO.NET是數據庫應用程序和數據源之間溝通的橋梁,主要提供了一個面向對象的數據訪問架構,用來開發數據庫應用程序。

ADO.NET主要包括Connection、Command、DataReader、DataSet和DataAdapter對象。詳細介紹如下:

對象名稱說明
Connection主要提供與數據庫的連接功能
Command用于返回數據、修改數據、運行存儲過程以及發送或檢索參數信息的數據庫命令
DataReader通過Command對象提供從數據庫檢索信息的功能。以一種只讀的、向前的、快速的方式訪問數據庫
DataSet支持ADO.NET斷開式、分布式數據方案的核心對象。是一個數據庫容器,可以看作是內存中的數據庫
DataAdapter

提供連接DataSet對象和數據源的橋梁,DataAdapter對象使用Command對象在數據源中執行SQL命令,

以便將數據加載到DataSet中,并確保DataSet中數據的更改與數據源保持一致。

1.使用Connection連接數據庫

在打開數據庫建立連接之前,必須先設置好連接字符串(ConnectionString)

1.直接定義在字符串中

string Connstr = "Data Source=.;Initial Catalog=MyTest;User ID=sa;PassWord=12345";

2.存放在應用程序的配置文件(App.Config)中(實際開發的時候一般采用這種,......)

<connectionStrings> <add name="dbConnStr" connectionString="Data Source=.;Initial Catalog=MyTest;User ID=sa;Password=12345"/> </connectionStrings>

在后臺代碼里進行讀取:

string Connstr = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;

其中的參數說明如下:

DataSource為數據源,值為要連接的SQL Server實例的名稱或網絡地址(.表示本機的網絡地址)

Initial Catalog為初始目錄,值為數據庫的名稱

User ID為用戶ID,值為SQL Server登陸賬戶

Password為密碼,值為SQL Server賬戶登錄的密碼

Connect Timeout為連接超時設定,其值表示在終止嘗試并產生錯誤之前,等待與服務器的連接的時間長度(以秒為單位)

Integrated Security此參數決定是否是安全連接??赡艿娜≈涤蠺rue,False,SSPI(SSPI是True的同義詞)

前4個(DataSource,Initial Catalog,User ID,Password)是連接到SQL Server的連接字符串的必有項。

設置好連接字符串之后就可以使用SqlConnection對象來連接數據庫了。調用SqlConnection對象的Open或Close方法可以打開或關閉數據庫連接,必須注意必要時再打開數據庫連接并盡早關閉。

e.g:

SqlConnection conn = new SqlConnection(Connstr); conn.Open(); if (conn.State==ConnectionState.Open) { MessageBox.Show("SQL Server數據庫連接開啟"); conn.Close(); } if(conn.State==ConnectionState.Closed) { MessageBox.Show("SQL Server數據庫連接關閉"); }

2.使用Command對象操作數據

  屬性說明
CommandType獲取或設置Command對象要執行命令的類型
CommandText獲取或設置要對數據庫執行的SQL語句或存儲過程名或表名
CommandTimeOut獲取或設置在終止對執行命令的嘗試并生成錯誤之前的等待時間
Connection獲取或設置此Command對象使用的Connection對象的名稱
Parameters獲取Command對象需要使用的參數集合

創建Command對象必須指定3個屬性(Connection,CommandType,CommandText):

Connection屬性:SqlCommand是對象執行命令操作的對象,它本身無法建立與數據庫的連接,只能通過SqlConnection對象來建立連接。

CommandType和CommandText屬性:CommandText既可以是SQL語句,也可以是存儲過程,還可以是表的名字。要使用不同種類的CommandText,只需要設置相應的CommandType即可。

CommandType.Text:CommandType的默認值,表示執行的是SQL語句,為CommandText指定SQL字符串。

CommandType.StoredPRocedure:指示執行的是存儲過程,需要為CommandText指定一個儲存過程的名稱。

CommandType.TableDirect:指示用戶將得到這個表中的所有數據,為CommandText指定一個數據表名稱(不過還是建議直接寫SQL來實現這個功能)。

e.g:

示例1:

using(SqlCommand cmd = new SqlCommand())//創建命令對象SqlCommand { cmd.Connection = conn;//設置連接對象 cmd.CommandType = CommandType.Text;//設置Command對象執行語句的類型 cmd.CommandText = "Insert into Tbl_Students values ('aaa',20,'football');";//設置執行的語句 MessageBox.Show(cmd.ExecuteNonQuery().ToString());//ExecuteNonQuery返回執行SQL語句,受影響的行數 }

示例2:

using(SqlCommand cmd = new SqlCommand("Insert into Tbl_Students values ('aaa',20,'football');",conn)) { MessageBox.Show(cmd.ExecuteNonQuery().ToString()); }

示例3:

using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "Delete from Tbl_Students where Name='aaa';"; MessageBox.Show(cmd.ExecuteNonQuery().ToString()); }

在執行Command操作時,有3種方法可用:

ExecuteNonQuery:用于非SELECT命令,比如INSERT,DELETE,UPDATE命令,返回命令所影響的數據的行數。也可以用ExecuteNonQuery來執行一些數據定義命令,比如新建、更新、刪除數據庫對象(如表、索引等)

ExecuteScalar:用于執行SELECT查詢命令,返回數據中第一行第一列的值。通常用來執行那些用到COUNT或SUM函數的SELECT命令

ExecuteReader:執行SELECT命令,并返回一個DataReader對象。

這3個方法非常重要,如果要使用ADO.NET完成某種數據庫操作,一定會用到這些方法,它們沒有優劣之分,只是使用的場合不同。

使用Command對象來具體的添加、修改、刪除數據就不舉例說明了。

3.使用DataReader對象讀取數據

在對數據庫中的數據進行查詢顯示操作時,就可以使用DataReader對象來實現。當Command對象返回結果集時,需要使用DataReader對象來檢索數據。DataReader對象返回一個來自Command的只讀的、只能向前的數據流。

DataReader對象是一個簡單的數據集,用于從數據源中讀取只讀的數據集,并常用于檢索大量數據。DataReader每次只能在內存中保留一行,開銷非常小。但在讀取數據時,必須一直保持與數據庫的連接(連線模式)。它是一個輕量級的數據對象,如果只需將數據讀出并顯示,那么它是最合適的工具,它的讀取速度比DataSet(后面會講到)對象要快,占用的資源也比DataSet少。

常用屬性:

HasRows:判斷DataReader對象中是否還有數據

FieldCount:獲取當前行的列數

RecordsAffected:獲取執行SQL語句所更改、添加或刪除的行數

常用方法:

Read:使DataReader對象前進到下一條數據

Close:關閉DataReader對象

Get:用來讀取數據集當前行的某一列的數據

e.g:

using (SqlDataReader reader = cmd.ExecuteReader()) { if (reader.HasRows) { while (reader.Read()) { MessageBox.Show(reader.GetString(1)); } } }

通過SqlCommand對象的ExecuteReader方法從數據源中檢索數據來創建SqlDataReader對象。還得注意在讀取完數據后,務必把DataReader對象關閉,否則當DataReader對象尚未關閉時,DataReader所使用的Connection對象就無法執行其他操作了。比較好的做法就是把這些全部放在using語句里面,讓其自動完成關閉以及對象的回收工作,不必再讓我們來操心了。

e.g:

 1       using (SqlConnection conn = new SqlConnection(Connstr)) 2             { 3                 conn.Open(); 4                 using (SqlCommand cmd = conn.CreateCommand()) 5                 { 6                     cmd.CommandText = "select * from Tbl_Students;"; 7                     using (SqlDataReader reader = cmd.ExecuteReader()) 8                     { 9                         if (reader.HasRows)10                         {11                             while (reader.Read())12                             {13                                 MessageBox.Show(reader.GetString(1));14                             }15                         }16                     }17 18                 }19             }

4.使用DataSet和DataAdapter查詢數據

DataSet可以看作是在內存中創建的一個小型關系數據庫,它將數據庫中的數據復制了一份放到用戶本地(客戶端)的內存中,供用戶在不連接數據庫的情況下讀取數據,充分利用了客戶端資源,大大降低了數據庫服務器的壓力。它是ADO.NET最核心成員之一,它是支持ADO.NET斷開式、分布式數據方案的核心對象,也是非連接的數據查詢的核心組件

DataAdapter對象(數據適配器)是一種用來充當DataSet對象與實際數據源之間橋梁的對象,只要有DataSet的地方就有它,專門為DataSet服務的。它的工作方式一般有兩種:一種是通過Command對象執行SQL語句從數據源中檢索數據,將獲取的結果集填充到DataSet對象的表中;另一種是把用戶對DataSet對象作出的更改寫入到數據源中。

 1       using (SqlConnection conn = new SqlConnection(Connstr)) 2             { 3                 conn.Open(); 4                 using (SqlCommand cmd = conn.CreateCommand()) 5                 { 6                     //DataSet離線數據集 7                     cmd.CommandText = "select * from Tbl_Students where Age<30;"; 8                     DataSet dataset = new DataSet(); 9                     SqlDataAdapter adapter = new SqlDataAdapter(cmd);10                     adapter.Fill(dataset);11                     ShowDsTable(dataset.Tables[0]);12                     for (int i = 0; i <=dataset.Tables[0].Rows.Count-1; i++)13                     {14                         dataset.Tables[0].Rows[i]["Name"] += i.ToString();15                     }16                     SqlCommandBuilder builder = new SqlCommandBuilder(adapter);17                     adapter.Update(dataset);18                     ShowDsTable(dataset.Tables[0]);19                 }20             }21         }22 23         private void ShowDsTable(DataTable dataTable)24         {25             foreach (DataRow row in dataTable.Rows)26             {27                 string name = (string)row["Name"];28                 int age = (int)row["Age"];29                 MessageBox.Show("Name:" + name + ",Age:" + age.ToString());30             }31         }

SqlCommandBuilder對象用于自動生成表單命令,將對DataSet所做的更改與關聯的SQL Server數據庫更改相協調。

最后還有一個就是可以通過SqlCommand.Parameters屬性的參數傳值防止SQL語句注入式攻擊。

e.g:

普通的SQL語句:select * from Tbl_Students where Name='czh';

簡單的SQL注入式攻擊:select * from Tbl_Students where Name='czh' or '1'='1';

改成 cmd.CommandText = "select * from Tbl_Students where Name=@Name;";cmd.Parameters.AddWithValue("@Name", "czh");

就行啦。

關于ADO.NET基礎的一些技術就是這些了,在C#里面連接SQL Server數據庫主要就是SqlConnection、SqlCommand、SqlDataReade

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产日韩欧美在线图片| 国产在线98福利播放视频| 亚洲图片欧美午夜| 亚洲国产欧美自拍| 97在线精品国自产拍中文| 欧美电影免费观看电视剧大全| 日韩精品视频在线观看网址| 在线观看成人黄色| 一道本无吗dⅴd在线播放一区| 69视频在线播放| 超碰91人人草人人干| 日本欧美中文字幕| 91亚洲va在线va天堂va国| 欧美激情在线狂野欧美精品| 亚洲欧美另类自拍| 久久在线免费视频| 色多多国产成人永久免费网站| 清纯唯美日韩制服另类| 日韩av在线资源| 国产精品黄页免费高清在线观看| 97精品国产97久久久久久| 国产精品美女av| 97在线精品国自产拍中文| 国产精品自拍偷拍| 国产一区二区三区直播精品电影| 成人免费视频xnxx.com| 95av在线视频| 久久亚洲一区二区三区四区五区高| 中文字幕日韩在线视频| 精品欧美一区二区三区| 91精品综合视频| 日本高清久久天堂| 日韩精品999| 日韩高清人体午夜| 久久精品久久久久久| 精品中文字幕久久久久久| 国产精品va在线播放| 国产美女精品视频免费观看| 91精品在线观看视频| 久久视频在线播放| 3344国产精品免费看| 日韩欧美亚洲成人| 88国产精品欧美一区二区三区| 亚洲精品欧美极品| 91牛牛免费视频| 亚洲人免费视频| www.久久久久久.com| 久久视频精品在线| 91精品视频在线播放| 亚洲第一精品夜夜躁人人躁| 中文字幕日韩精品在线观看| 欧美成aaa人片免费看| 国产成人精品免费久久久久| 亚洲国产精品va在线看黑人动漫| 国产欧美日韩中文字幕| 国产香蕉97碰碰久久人人| 91免费版网站入口| 岛国精品视频在线播放| 另类少妇人与禽zozz0性伦| 日本一区二三区好的精华液| 国产一区二区在线免费视频| 国产精品国产自产拍高清av水多| 91av福利视频| 国产精品精品一区二区三区午夜版| 欧美精品在线看| 久久天天躁狠狠躁老女人| 欧美日韩成人在线播放| 欧美乱妇高清无乱码| 欧美午夜精品久久久久久人妖| 亚洲欧美一区二区三区在线| 成人免费视频在线观看超级碰| 亚洲成av人乱码色午夜| 亚洲区bt下载| 91探花福利精品国产自产在线| 日韩网站免费观看| 亚洲黄页网在线观看| 欧美日产国产成人免费图片| 欧美黑人性猛交| 亚洲网址你懂得| 久久久久久亚洲精品中文字幕| 国产黑人绿帽在线第一区| 欧美国产日本高清在线| 久久久免费观看| 91国产中文字幕| 亚洲欧美另类在线观看| 国产香蕉97碰碰久久人人| 精品国内产的精品视频在线观看| 欧美精品在线视频观看| 亚洲性猛交xxxxwww| 国产精品视频一区二区三区四| 欧美激情亚洲自拍| 国产精品久久久久久久久久久不卡| 国产免费一区二区三区在线观看| 国产91亚洲精品| 2018日韩中文字幕| 欧美高清无遮挡| 日韩有码片在线观看| 777777777亚洲妇女| 久久精品国产v日韩v亚洲| 精品一区精品二区| 久久久成人精品| 国产精品久久久久aaaa九色| 98精品国产高清在线xxxx天堂| 中文字幕日韩精品在线观看| 黄色91在线观看| 欧美性极品xxxx娇小| 国产精品日本精品| 亚洲人成人99网站| 91美女片黄在线观| 91精品国产91久久久久久| 国产视频久久久久久久| 91精品国产91久久久| 91中文在线视频| 91精品久久久久久综合乱菊| 久久偷看各类女兵18女厕嘘嘘| 国产男人精品视频| 亚洲欧美日韩久久久久久| 国产性猛交xxxx免费看久久| 亚洲欧美日韩精品| 久久影院免费观看| 日本国产欧美一区二区三区| 日韩精品中文字幕有码专区| 成人乱色短篇合集| 国产亚洲视频在线观看| 色视频www在线播放国产成人| 中文字幕一区二区三区电影| 亚洲开心激情网| 午夜剧场成人观在线视频免费观看| 美日韩在线视频| 欧美高清在线播放| 亚洲高清一二三区| 精品亚洲va在线va天堂资源站| 81精品国产乱码久久久久久| 国产成人涩涩涩视频在线观看| 久久久99免费视频| 2019精品视频| 国产精品69久久| 亚洲成人免费在线视频| 国产成人精品日本亚洲专区61| 亚洲女在线观看| 久久久久久久国产精品视频| 亚洲国产中文字幕久久网| 夜夜嗨av一区二区三区免费区| 欧美日韩视频免费播放| 精品久久久免费| 国产成人小视频在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美香蕉大胸在线视频观看| 日韩av在线免费观看一区| 亚洲精品自产拍| 久久视频在线视频| 日韩电影视频免费| 欧美午夜片在线免费观看| 国产在线视频不卡| 国产一区二区美女视频| 久久影院中文字幕| 亚洲免费小视频| 亚洲最新中文字幕| 亚洲第一色中文字幕| 日韩精品中文在线观看| 亚洲久久久久久久久久| 国产成人+综合亚洲+天堂| 日本久久久久久久| 日韩精品免费观看|