淺析ADO.NET的相關(guān)知識(shí)
ADO.NET在處理數(shù)據(jù)時(shí),可分為連接式與斷開(kāi)式
ADO.NET涉及到的主要對(duì)象:
連接對(duì)象:Connection
命令對(duì)象:Command
數(shù)據(jù)讀取器對(duì)象:DataReader
數(shù)據(jù)適配器對(duì)象:DataAdapter
數(shù)據(jù)集對(duì)象: DataSet
下面是一個(gè)簡(jiǎn)單的ADO.NET連接式訪問(wèn)數(shù)據(jù)庫(kù)的代碼
- private static void ReadOrderData(string connectionString)
- {
- string queryString =
- "SELECT OrderID, CustomerID FROM dbo.Orders;";
- //此處使用using來(lái)自動(dòng)釋放connection
- using (SqlConnection connection =
- new SqlConnection(connectionString))
- {
- SqlCommand command =
- new SqlCommand(queryString, connection);
- connection.Open();
- SqlDataReader reader = command.ExecuteReader();
- // SqlDataReader 的默認(rèn)位置在***條記錄前面。因此,必須調(diào)用 Read 來(lái)開(kāi)始訪問(wèn)任何數(shù)據(jù)
- while (reader.Read())
- {
- Console.WriteLine(String.Format("{0}, {1}",
- reader[0], reader[1]));
- }
- // 關(guān)閉reader
- reader.Close();
- //對(duì)于SqlConnection的MARS模式關(guān)閉的情況下,一次只能打開(kāi)一個(gè) SqlDataReader,在***個(gè)關(guān)閉之前,打開(kāi)另一個(gè)的任何嘗試都將失敗。另外,在reader不關(guān)閉之前,相同的command.ExecuteReader();將會(huì)失敗(無(wú)論是否為MARS)
- }
- }
接下來(lái)對(duì)上面這段代碼做一些說(shuō)明:
代碼:
- Console.WriteLine(String.Format("{0}, {1}",
- reader[0], reader[1]));
使用了reader的索引器,
索引器調(diào)用所的方法如下:
- override public object this[int i] {
- get {
- return GetValue(i);
- }
- }
- override public object this[string name] {
- get {
- return GetValue(GetOrdinal(name));
- }
- }
(二)關(guān)于command的一些方法的說(shuō)明
ExecuteNonQuery 對(duì)連接執(zhí)行 Transact-SQL 語(yǔ)句并返回受影響的行數(shù)。 (重寫(xiě) DbCommand..::.ExecuteNonQuery()()()。)
ExecuteReader 已重載。 將 CommandText 發(fā)送到 Connection 并生成一個(gè) SqlDataReader。
ExecuteScalar 執(zhí)行查詢,并返回查詢所返回的結(jié)果集中***行的***列。忽略其他列或行。 (重寫(xiě)
DbCommand..::.ExecuteScalar()()()。)
ExecuteXmlReader 將 CommandText 發(fā)送到 Connection 并生成一個(gè) XmlReader 對(duì)象。
(三)關(guān)于connectionstring
以下是常用的幾種connectionstring
- //基本
- string baseconnstr="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword";
- //MARS
- string marsconnstr="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"
- +"MultipleActiveResultSets=true"
- //在app_data文件夾中的sqlexpress.mdf
- string mdfDataDir="Server=.\SQLExpress;AttachDbFilename=|DataDirectory|mydbfile.mdf; Database=dbname;Trusted_Connection=Yes;"
- //使用SQL集群故障轉(zhuǎn)移
- string mirrorconnstr="Data Source=myServerAddress;Failover Partner=myMirrorServerAddress;Initial Catalog=myDataBase;Integrated Security=True;"
- //異步
- string asynconnstr="Server=myServerAddress;Database=myDataBase;Integrated Security=True;Asynchronous Processing=True;"
MARS中,其實(shí)ADO.NET是對(duì)未關(guān)閉的sqlcommand掛起.所以datareader只能使用其各自的command實(shí)例.
【編輯推薦】