日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

ADO.NET知识学习总结

發(fā)布時間:2025/7/14 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ADO.NET知识学习总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 概述?

???????? 使用的命名空間: System.Data.SqlClient

???????? 連接字符串??? 服務(wù)器/數(shù)據(jù)庫實例+數(shù)據(jù)庫名稱+安全信息+用戶名+密碼? 可參考http://www.connectionstrings.com

?

2. 常用類

?? ( 1) SqlConnection類

???????? 1). 處理連接相關(guān)事項

???????? 2). 實現(xiàn)了IDisposable接口,因此使用完之后資源要釋放 一般使用 using語句資源管理機(jī)制try-catch-finally

??????????????????? 類似的類型還有 FileStream 類型。 conn.Close()方法 只關(guān)閉連接而不釋放,仍可再次打開

?????????????????????????????????????????????????????????????????????? conn.Dispose(bool)方法 完成釋放連接,已包含 Close() 方法。

???????? 3). CreateCommand()方法??? public System.Data.SqlClient.SqlCommand CreateCommand()?

??????????????????? 返回 SqlCommand 類型的對象

?

(2) SqlCommand類? (除使用new外,另可由SqlConnection類的CreateConnection()生成對象)

??????? 1). 處理命令相關(guān)事項

??????? 2). 實現(xiàn)了IDisposable接口,因此使用完之后資源要釋放 一般使用 using語句資源管理機(jī)制try-catch-finally

????? ? 3). CommandText屬性?? public override string CommandText { set; get; } 存放SQL語句

??????? 4). Parameters屬性??? public System.Data.SqlClient.SqlParameterCollection Parameters { get; }

???????????????????? 通常使用 Add 方法?

??????????????????????????????????????????????????? ?

??????????????????? Clear()方法?? public override void Clear()

??????????????????????????? 通常,對于while循環(huán)里的同一個Connection,每次添加的參數(shù)要清除后才能再添加。

??????????????????????????? 此方法從SqlParameterCollection 中移除所有SqlParameter 對象。

??????? 5). ExecuteNonQuery()方法? public override int ExecuteNonQuery()

????????????????????????????????????????????????? 對應(yīng)非查詢語句,如 insert/delete/update。 返回受影響的行數(shù)。

??????? 6). ExecuteReader()方法? public System.Data.SqlClient.SqlDataReader ExecuteReader()

???????????????????????????????????????????? 對應(yīng)查詢語句。

??????? 7). ExecuteScalar()方法? public override object ExecuteScalar()

?????????????????????????????????????????? 對應(yīng)查詢語句,返回結(jié)果集的第一行第一列數(shù)據(jù),類型為Object, 使用時要轉(zhuǎn)換。

?????????????????????????????????????????? 使用動機(jī): 多結(jié)合SQL語句: select count(*) from…用在判斷是否返回數(shù)據(jù),以作進(jìn)一步操作

?

(3) SqlDataReader類

??????? 1). 實現(xiàn)了IDisposable接口,因此使用完之后資源要釋放 一般使用 using語句資源管理機(jī)制try-catch-finally

??????? 2). 除使用new外,另可由SqlCommand類的ExecuteReader()生成對象
??????? 3). 其對象實質(zhì)為指針,對應(yīng)于數(shù)據(jù)庫游標(biāo)。本身不存儲數(shù)據(jù),知道讀時,才會取數(shù)據(jù)庫中數(shù)據(jù)

??????? 4). Reader()?? public override bool Read()

???????????????????????? 使SqlDataReader 前進(jìn)到下一條記錄, 如果存在多個行,則為 true;否則為 false。

???????????????????????? 常與while() 語句組合使用。

??????? 5). GetOrdinal(string)方法?? public override int GetOrdinal(string name)
????????????????????????????????????? 在給定列名稱的情況下獲取列序號,參數(shù)name: 列的名稱,返回從零開始的列序號。
??????? 6). GetString(int)、GetInt32(int)等方法??

????????????????????????????????????? 只接受整形參數(shù),得到相應(yīng)的值。

?

using(SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Workspace\Database1.mdf;Integrated Security=True;User Instance=True")) {conn.Open();using (SqlCommand cmd = conn.CreateCommand()){cmd.CommandText = "select * from T_User";using (SqlDataReader reader = cmd.ExecuteReader()){while (reader.Read()){ //取出當(dāng)前行的第1列的數(shù)據(jù)Console.WriteLine(reader.GetString(1));//其中reader.GetOrdinal("UserName")是根據(jù)字段名得到這一列的序號Console.WriteLine("跟據(jù)用戶名得到根:"+reader.GetString(reader.GetOrdinal("

UserName

"))}}} }

鏈接

SQL表名最好不要為關(guān)鍵字,如果需要,則在查詢字符串中使用“[ ]”。 要想得到自動增長字段的主鍵值,在SQL語句中的values關(guān)鍵字前加上“

output inserted.Id

”(Id為主鍵字段名) insert into T_Users(username,password) output inserted.ID values(‘a(chǎn)dmin’,'888’) int i=Convert.Toint32(cmd.Executescalar); @usename 表示此處用參數(shù)替代,在SqlConnection的Parameters屬性中添加參數(shù)

?

(4) SqlParameter類

??????? 1) 為防止注入式攻擊。
??????? 2) public sealed class SqlParameter : System.Data.Common.DbParameter
??????? 3) 表示 System.Data.SqlClient.SqlCommand 的參數(shù),也可以是它到 System.Data.DataSet 列的映射。此類不能被

??????????? 繼承。

??????? 4) 構(gòu)造函數(shù)

???????????????????????? public SqlParameter(string parameterName, object value)

????????????????????????????

???????????????? 一個缺陷:由于System.Data.SqlDbType是枚舉類型,枚舉值為整數(shù),上面的構(gòu)造函數(shù)經(jīng)常與下圖第四個混用。

???????????????????????????????? 如value為0時,改進(jìn)方法:SqlParameter("id”,0)變?yōu)?SqlParame("id",(object)0);

???????????????????????? 其他構(gòu)造函數(shù),可參考相關(guān)文獻(xiàn)

??????????????????????????????????

?

?

2. 相關(guān)知識

????? (1). ConfigurationManager類? public static class ConfigurationManager

???????????? 1). 在命名空間 System.Configuration 中定義

???????????? 2). 提供對客戶端應(yīng)用程序配置文件的訪問。無法繼承此類。

???????????? 3). 在部署的應(yīng)用程序中,修改配置信息,可通過./bin/Debug/項目名.config文件。

????????????

??????????????????????????? string constr=ConfigurationManager.ConnectionStrings[“txl”].ConnectionString;

?? ? (2).封裝連接? SQLHelper

class SQLHelper {//ExecuteNonQuery("insert into t(f1,f2) values(@f1,@f2)",p1,p2,p3,p4)public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters){string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;using (SqlConnection conn = new SqlConnection(constr)) {conn.Open();using (SqlCommand cmd = conn.CreateCommand()){cmd.CommandText = sql;//需要兩個SqlParameter對象foreach (SqlParameter parameter in parameters){cmd.Parameters.Add(parameter);}return cmd.ExecuteNonQuery();}}}public static object ExecuteScalar(string sql, params SqlParameter[] parameters){string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;using (SqlConnection conn = new SqlConnection(constr)){conn.Open();using (SqlCommand cmd = conn.CreateCommand()){cmd.CommandText = sql;foreach (SqlParameter parameter in parameters){cmd.Parameters.Add(parameter);}return cmd.ExecuteScalar();}}}//不宜封裝,因為當(dāng)SQLHelper.ExecuteReader()執(zhí)行完之后,返回的DataReader對象已不能用了//若想使用,可利用DataSet機(jī)制public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameters){} }

??????????

3. 弱類型

?

??? (1). DataSet類

??????? 1).數(shù)據(jù)在內(nèi)存中的緩存,服務(wù)器斷開不影響數(shù)據(jù)的讀取。

??????? 2).包含若干張DataTable, DataTable包含若干行DataRow。

??????? 3).Tables屬性?? public System.Data.DataTableCollection Tables { get; }? 獲取包含在DataSet中的表DataTable的集合

??????? 4).GetChanges()方法? public System.Data.DataSet GetChanges() 得到修改后“結(jié)果集”,降低傳遞的資源占用。

??????????????? 獲取 System.Data.DataSet 的副本,該副本包含自加載以來或自上次調(diào)用 DataSet.AcceptChanges() 以來對該數(shù)據(jù)集進(jìn)行的所有更改。可以對該副本執(zhí)行操作,然后可以使用 DataSet.Merge(DataSet) 將其合并回去。如果未找到更改的行,則該方法將返回 null。

??????? 5).AcceptChanges()方法? public void AcceptChanges()

???????????????? 提交自加載此DataSet 或上次調(diào)用DataSet.AcceptChanges() 以來對其進(jìn)行的所有更改。

?

??? (2). DataTable類

??????? 1). 表示內(nèi)存中數(shù)據(jù)的一個表。

??????? 2). 包含若干行DataRow

??????? 3). Rows屬性? public System.Data.DataRowCollection Rows { get; }

??????????????????? 獲取屬于該表的行的集合。返回值:包含 System.Data.DataRow 對象的 System.Data.DataRowCollection;否則為 null 值(如果不存在任何 System.Data.DataRow 對象)。

??????? 4). NewRow()方法? public System.Data.DataRow NewRow()

???????????????????? 創(chuàng)建與該表具有相同架構(gòu)的新 System.Data.DataRow。

??????? 5). AcceptChanges()方法,GetChanges()方法? 同DataSet類類似

?????????????????? public void AcceptChanges(), public System.Data.DataTable GetChanges()

??????? 6)與DataSet關(guān)系

?????????????????? DataSet類的 DataTableCollection類型的屬性存放此類對象的集合。它有Add(),Remove(),RemoveAt()方法等。可使用”索引指示器“機(jī)制讀寫相關(guān)數(shù)據(jù)。

?

?? (3). DataRow類
?????? 1).表示 System.Data.DataTable 中的一行數(shù)據(jù)

?????? 2).AcceptChanges()方法 public void AcceptChanges()

???????????????????? 提交自上次調(diào)用 System.Data.DataRow.AcceptChanges() 以來對該行進(jìn)行的所有更改。

?????? 3)與DataTable關(guān)系

?????????????? DataTable類的 DataRowCollection類型的屬性存放此類對象的集合。它有count屬性

RemoveAt()方法等。可使用”索引指示器“機(jī)制讀寫相關(guān)數(shù)據(jù)。

?

?? (4). SqlDataAdapter類

?????? 1). 表示用于填充 System.Data.DataSet 和更新 SQL Server 數(shù)據(jù)庫的一組數(shù)據(jù)命令和一個數(shù)據(jù)庫連接。無法繼承此類。

??????? 2). 構(gòu)造函數(shù)

??????????????????

?????????????? 前兩個構(gòu)造函數(shù)的第一個參數(shù)是指 SqlDataAdapter類的SelectCommand屬性。是T-SQL查詢語或存儲過程。

???????? 3). Update()方法

??????????????????

???????????????????

???????????????? 為指定的對象插入、已更新或已刪除的行,調(diào)用相應(yīng)的 INSERT、UPDATE 或 DELETE 語句。

???????????????? 即提交的對象可以是? DataSet,DataTable 或者 若干行DataRow。

?

???????? 4). Fill()方法

??????????????????

???????????????????? 在指定范圍中添加或刷新行以匹配使用DataSet或DataTable 名稱的數(shù)據(jù)源中的行。

??????? 5). DeleteCommand? 獲取或設(shè)置用于從數(shù)據(jù)集中刪除記錄的命令。

???????????? InsertCommand? 獲取或設(shè)置用于將新記錄插入到數(shù)據(jù)源中的命令。

???????????? UpdateCommand? 獲取或設(shè)置用于更新數(shù)據(jù)源中的記錄的命令。

??????? 6). 提交數(shù)據(jù)時,為自動生成Command,可以使用 SqlCommandBuilder類

???????????? 即 在 Update()或Fill()方法之前加入一句

????????????????????? SalCommandBuilder builder=new SqlCommandBuilder(adapter);

???????????? adapter使用的 SqlDataAdapter 對象。

???????????? 使用前提: 表必須有主鍵。

????

???? (5). 可空類型

???????? 1).int、GuId、bool等 值類型 不能賦值為NULL,但String等 應(yīng)用類型可賦值為NULL。

???????????? 數(shù)據(jù)庫int類型字段可以賦值為NULL,這就產(chǎn)生了C#語言與數(shù)據(jù)庫的矛盾。

???????????? 解決:可控類型???? int? i1=NULL;??? int? i2, i3;? int i4=1;

???????? 2). 判斷??? i3==NULL? true(為空)/false(不為空)?????? i1.HasValue()?? true(不為空)/false(為空)

???????????? 轉(zhuǎn)換??? 可空類型to非空類型????? 顯式??? i4=i1.Value();

??????????????????????? 非空類型to可空類型????? 不需要顯式? i2=i4;

????

??? (6). 總結(jié)

?????????? 弱類型缺點(diǎn):

????????????? 1). 只能通過”字段名“引用。 如果寫錯了字段名編譯時不會發(fā)現(xiàn)錯誤。如 dataset.Tables[0].Rows[0][“age”];

????????????? 2). 需類型轉(zhuǎn)換。如 int age=Convert.ToInt32(dataset.Tables[0].Rows[0][“age”]); 取出的為Object類型,易出錯。

????????????? 3).運(yùn)行時方知所有列名,數(shù)據(jù)綁定麻煩,不適應(yīng)快速開發(fā)。

?

?

4 Typed DateSet?? (一切都是自動生成)

?

?????? (1).字符串:? 項目文件?? Property下的Settings.Settings查看

?????????????????????????????? 部署后在?? bin/Debug/項目名稱.config文件中

?????? (2). 表名TableAdapter類

??????????????????????? GetData() 返回 表名DataTable 一般首次返回DataTable時使用

??????????????????????? Fill(DataSet) 提交

??????????????????????? Update(DataSet) 提交?? 可能會發(fā)生異常,程序需通過主鍵來定義需要更新的行。

??????????????????????????????????????????????????????????? 處理方法:?? 數(shù)據(jù)庫設(shè)主鍵,DataTable右擊“配置”

???????????????? 以上方法都有對應(yīng)的SQL語句。也可自定義SQL語句,生成對應(yīng)的方法(dataset右擊“添加”)

???????????????????????? Connection屬性 擁有open() 、close()和 state屬性

?

??????? (3).項目名DataSet類、表名DataTable類和表名Row類

?????????

??????? (4). 優(yōu)缺點(diǎn)

???????????????? 1) 每次修改”字段“需重新生成DataSet

???????????????? 2) 通過列名取數(shù)據(jù)需保證字段值不能為NULL,否則會報異常。因此,使用之前需判空 IsValueNull()方法

?

5 其他類型

Technorati 標(biāo)簽: ado.net,dataset

???

????? (1)Stopwatch類? 在 System.Diagnostics命名空間下?? 秒表計時類

??????????????????????????????????? Start()、Stop()和 public System.TimeSpan Elapsed { get; }屬性(獲取當(dāng)前實例測量得出的總運(yùn)行時間)

????? (2)MessageBox類? 在System.Windows.Forms命令空間下

????????????????????????????????????? 顯示可包含文本、按鈕和符號(通知并指示用戶)的消息框。

????????????????????????????????????? 一個Show()方法用于顯示具有指定內(nèi)容的消息框。

????? (3)ComboBox類?? public class ComboBox : System.Windows.Forms.ListControl

???????????????????????????????????? 下拉列表組合框

???????????????????????????????????? Items屬性?? public System.Windows.Forms.ComboBox.ObjectCollection Items { get; }?

????????????????????????????????????????????? 獲取一個對象,該對象表示該ComboBox 中所包含項的集合。
???????????????????????????????????? SelectedItem屬性?? public object SelectedItem { get;? set; }

????????????????????????????????????????????? 獲取或設(shè)置 ComboBox 中當(dāng)前選定的項。

???????????????????????????????????? SelectedIndexChanged事件? System.Windows.Forms.ComboBox.SelectedIndexChanged

?????????????????????????????????????????????? 在 System.Windows.Forms.ComboBox.SelectedIndex 屬性更改后發(fā)生

???????????????????????????????????? ToString()方法

???????????????????????????????????? 分清 DisplayMember和ValueMember

?

轉(zhuǎn)自:http://www.cnblogs.com/dadashazhu/archive/2012/02/18/2356863.html

轉(zhuǎn)載于:https://www.cnblogs.com/eagle1986/archive/2012/02/25/2368219.html

總結(jié)

以上是生活随笔為你收集整理的ADO.NET知识学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。