日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
ADO.NET入門五大你需要知道的對(duì)象

1.  ADO.NET 3.0 用于訪問和操作數(shù)據(jù)的兩個(gè)主要組件是: .NET Framework 數(shù)據(jù)提供程序 (虛線框內(nèi)) 和 DataSet 。

創(chuàng)新互聯(lián)是一家專業(yè)提供榮昌企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為榮昌眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

.NET Framework 數(shù)據(jù)提供程序是專門為數(shù)據(jù)操作以及快速、只進(jìn)、只讀訪問數(shù)據(jù)而設(shè)計(jì)的組件。

ADO.NET DataSet 是專門為獨(dú)立于任何數(shù)據(jù)源的數(shù)據(jù)訪問而設(shè)計(jì)的。

對(duì)象

說(shuō)明

Connection

建立與特定數(shù)據(jù)源的連接。 所有 Connection 對(duì)象的基類均為 DbConnection 類。

Command

對(duì)數(shù)據(jù)源執(zhí)行命令。 公開 Parameters,并可在 Transaction 范圍內(nèi)從 Connection 執(zhí)行。 所有 Command 對(duì)象的基類均為 DbCommand 類。

DataReader

從數(shù)據(jù)源中讀取只進(jìn)且只讀的數(shù)據(jù)流。 所有 DataReader 對(duì)象的基類均為 DbDataReader 類。

DataAdapter

使用數(shù)據(jù)源填充 DataSet 并解決更新。 所有 DataAdapter 對(duì)象的基類均為 DbDataAdapter 類。

注意:新手面試經(jīng)常會(huì)遇到考這樣的題:ADO.NET 的五大對(duì)象,就是 上面四種 + DataSet 要牢牢記住哦。后期開發(fā)也經(jīng)常用到。

2. Connection 對(duì)象(只介紹SqlConnection和JDBC)

使用connection連接的時(shí)候記得打開、關(guān)閉(返回連接池),建議使用using,這樣就不會(huì)忘記關(guān)了,將自動(dòng)斷開連接,即使發(fā)生無(wú)法處理的異常。

string connectionString = "數(shù)據(jù)庫(kù)連接字符串";

  
 
 
  1. using (SqlConnection connection = new SqlConnection(connectionString))
  2. {
  3.     connection.Open();
  4.     ....
  5. }

ODBC 比較麻煩 請(qǐng)參考微軟技術(shù)文檔:http://support.microsoft.com/kb/310988 (我很少用到)

   
 
 
  1. using (OdbcConnection connection = 
  2.   new OdbcConnection(connectionString))
  3. {
  4.     connection.Open();
  5.     ....
  6. }

3.Command對(duì)象

命令

返回值

ExecuteReader

返回一個(gè) DataReader 對(duì)象。

ExecuteScalar

返回?cái)?shù)據(jù)庫(kù)查詢出來(lái)的第一行第一列。

ExecuteNonQuery

執(zhí)行增刪改命令。

ExecuteXMLReader

返回 XmlReader 。 只用于 SqlCommand 對(duì)象。

下面用一個(gè)實(shí)例講解Connection 和 Command、DataReader以及儲(chǔ)存過(guò)程和參數(shù)的設(shè)置:

(1.)下載安裝微軟提供的Northwind數(shù)據(jù)庫(kù):

/Files/Simcoder/微軟提供的數(shù)據(jù)庫(kù).rar 含幫助文檔 簡(jiǎn)單容易操作 數(shù)據(jù)庫(kù)安裝后 文件默認(rèn)在C盤 然后附加即可

(2.)找到提供的存儲(chǔ)過(guò)程:(本實(shí)例 使用倒數(shù)第二個(gè) SalesByCategory 存儲(chǔ)過(guò)程做演示)

(3.)簡(jiǎn)單查看一下存儲(chǔ)過(guò)程的代碼,其實(shí)通過(guò)名字都能知道大概做什么用

 
 
 
  1. ----------------------  *創(chuàng)*建*存*儲(chǔ)*過(guò)*程* -----------------------
  2. set ANSI_NULLS ON
  3. set QUOTED_IDENTIFIER ON
  4. go
  5. ALTER PROCEDURE [dbo].[SalesByCategory]                           --修改存儲(chǔ)過(guò)程[SalesByCategory]
  6.     @CategoryName nvarchar(15), @OrdYear nvarchar(4) = '1998'     --設(shè)置參數(shù)  (以下的實(shí)現(xiàn)暫不用管)
  7. AS
  8. IF @OrdYear != '1996' AND @OrdYear != '1997' AND @OrdYear != '1998' 
  9. BEGIN
  10.     SELECT @OrdYear = '1998'
  11. END
  12. SELECT ProductName,
  13.     TotalPurchase=ROUND(SUM(CONVERT(decimal(14,2), OD.Quantity * (1-OD.Discount) * OD.UnitPrice)), 0)
  14. FROM [Order Details] OD, Orders O, Products P, Categories C
  15. WHERE OD.OrderID = O.OrderID 
  16.     AND OD.ProductID = P.ProductID 
  17.     AND P.CategoryID = C.CategoryID
  18.     AND C.CategoryName = @CategoryName
  19.     AND SUBSTRING(CONVERT(nvarchar(22), O.OrderDate, 111), 1, 4) = @OrdYear
  20. GROUP BY ProductName
  21. ORDER BY ProductName
  22. ----------------------  *執(zhí)*行*存*儲(chǔ)*過(guò)*程* -----------------------
  23. USE [Northwind]
  24. GO
  25. DECLARE    @return_value int
  26. EXEC    @return_value = [dbo].[SalesByCategory]
  27.         @CategoryName = N'Produce',
  28.         @OrdYear = N'1998'
  29. SELECT    'Return Value' = @return_value
  30. GO


--需要設(shè)置@CategoryName,@OrdYear(可以不設(shè)置 為空上面有判斷)參數(shù)值

查詢結(jié)果是:

(4.)新建一個(gè)控制臺(tái)的應(yīng)用程序 代碼如下:

 
 
 
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data.SqlClient;
  6. using System.Data;
  7. namespace ConsoleApplication1
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             GetSalesByCategory("server=.;uid=sa;pwd=123456;database=Northwind", "Produce");//在這里就默認(rèn)設(shè)置了 參數(shù)@CategoryName參數(shù)的值為 Produce
  14.         }
  15.         static void GetSalesByCategory(string connectionString,string categoryName)
  16.         {
  17.             using (SqlConnection connection = new SqlConnection(connectionString))
  18.             {
  19.                 SqlCommand command = new SqlCommand();
  20.                 command.Connection = connection;
  21.                 command.CommandText = "SalesByCategory";  //CommandType 屬性設(shè)置為 StoredProcedure 時(shí),CommandText 屬性應(yīng)設(shè)置為存儲(chǔ)過(guò)程的名稱
  22.                 command.CommandType = CommandType.StoredProcedure; //設(shè)置執(zhí)行類型為存儲(chǔ)過(guò)程
  23.                 SqlParameter parameter = new SqlParameter();
  24.                 parameter.ParameterName = "@CategoryName";//指定存儲(chǔ)過(guò)程中的那個(gè)參數(shù)
  25.                 parameter.SqlDbType = SqlDbType.NVarChar;//指定數(shù)據(jù)類型
  26.                 parameter.Direction = ParameterDirection.Input;//指定參數(shù)為輸入
  27.                 parameter.Value = categoryName;
  28.                 command.Parameters.Add(parameter);
  29.                 connection.Open();
  30.                 SqlDataReader reader = command.ExecuteReader();
  31.                 if (reader.HasRows)//判斷是否有數(shù)據(jù)行
  32.                 {
  33.                     while (reader.Read())
  34.                     {
  35.                         Console.WriteLine("{0}: {1:C}", reader[0], reader[1]);
  36.                     }
  37.                 }
  38.                 else
  39.                 {
  40.                     Console.WriteLine("No rows found.");
  41.                 }
  42.                 reader.Close();//記得關(guān)閉 
  43.                 Console.ReadLine();
  44.             }
  45.         }
  46.     }
  47. }

前面簡(jiǎn)單提到了 Connection 、DataReader、Comand以及參數(shù)和存儲(chǔ)過(guò)程的用法,現(xiàn)在更加深入的學(xué)習(xí)。

1.DataReader的用法:

DataReader 從數(shù)據(jù)庫(kù)中檢索只讀、只進(jìn)的數(shù)據(jù)流。查詢結(jié)果在查詢執(zhí)行時(shí)返回,在并存儲(chǔ)在客戶端的網(wǎng)絡(luò)緩沖區(qū)中,直到您使用 DataReader 的 Read 方法對(duì)它們發(fā)出請(qǐng)求。 使用 DataReader 可以提高應(yīng)用程序的性能,原因是它只要數(shù)據(jù)可用就立即檢索數(shù)據(jù),并且(默認(rèn)情況下)一次只在內(nèi)存中存儲(chǔ)一行,減少了系統(tǒng)開銷。

例子見上一篇即可,說(shuō)說(shuō)使用DataReader的心得,在做項(xiàng)目中,有時(shí)候一個(gè)實(shí)體類中的字段又是另外一個(gè)實(shí)體雷,存在外鍵的關(guān)系。如下實(shí)體類源碼 中就有2個(gè)這樣的關(guān)系(高亮代碼):

    
 
 
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace BookShop.Model
  5. {
  6.     [Serializable]
  7.     public class Book
  8.     {
  9.         /// 
  10.         /// 圖書編號(hào)
  11.         /// 
  12.         private int id;
  13.         public int Id
  14.         {
  15.             get { return id; }
  16.             set { id = value; }
  17.         }
  18.         /// 
  19.         /// 圖書標(biāo)題
  20.         /// 
  21.         private string title;
  22.         public string Title
  23.         {
  24.             get { return title; }
  25.             set { title = value; }
  26.         }
  27.         /// 
  28.         /// 圖書作者
  29.         /// 
  30.         private string author;
  31.         public string Author
  32.         {
  33.             get { return author; }
  34.             set { author = value; }
  35.         }
  36.         /// 
  37.         /// 圖書出版社
  38.         /// 
  39.         private Publisher publisher;
  40.         public Publisher Publisher
  41.         {
  42.             get { return publisher; }
  43.             set { publisher = value; }
  44.         }
  45.         /// 
  46.         /// 圖書出版日期
  47.         /// 
  48.         private DateTime publishDate;
  49.         public DateTime PublishDate
  50.         {
  51.             get { return publishDate; }
  52.             set { publishDate = value; }
  53.         }
  54.         /// 
  55.         /// 圖書ISBN編號(hào)
  56.         /// 
  57.         private string isbn;
  58.         public string Isbn
  59.         {
  60.             get { return isbn; }
  61.             set { isbn = value; }
  62.         }
  63.         /// 
  64.         /// 圖書總字?jǐn)?shù)
  65.         /// 
  66.         private int wordsCount;
  67.         public int WordsCount
  68.         {
  69.             get { return wordsCount; }
  70.             set { wordsCount = value; }
  71.         }
  72.         /// 
  73.         /// 圖書價(jià)格
  74.         /// 
  75.         private decimal unitPrice;
  76.         public decimal UnitPrice
  77.         {
  78.             get { return unitPrice; }
  79.             set { unitPrice = value; }
  80.         }
  81.         /// 
  82.         /// 圖書描述
  83.         /// 
  84.         private string contentDescription;
  85.         public string ContentDescription
  86.         {
  87.             get { return contentDescription; }
  88.             set { contentDescription = value; }
  89.         }
  90.         /// 
  91.         /// 圖書作者描述
  92.         /// 
  93.         private string authorDescription;
  94.         public string AuthorDescription
  95.         {
  96.             get { return authorDescription; }
  97.             set { authorDescription = value; }
  98.         }
  99.         /// 
  100.         /// 圖書作者評(píng)語(yǔ)
  101.         /// 
  102.         private string editorComment;
  103.         public string EditorComment
  104.         {
  105.             get { return editorComment; }
  106.             set { editorComment = value; }
  107.         }
  108.         /// 
  109.         /// 圖書目錄
  110.         /// 
  111.         private string toc;
  112.         public string Toc
  113.         {
  114.             get { return toc; }
  115.             set { toc = value; }
  116.         }
  117.         /// 
  118.         /// 圖書的分類
  119.         /// 
  120.         private Category category;
  121.         public Category Category
  122.         {
  123.             get { return category; }
  124.             set { category = value; }
  125.         }
  126.         /// 
  127.         /// 圖書點(diǎn)擊
  128.         /// 
  129.         private int clicks;
  130.         public int Clicks
  131.         {
  132.             get { return clicks; }
  133.             set { clicks = value; }
  134.         }
  135.     }
  136. }

如果是這種關(guān)系,使用Datareader 就可能會(huì)出現(xiàn)異常,因?yàn)楫?dāng)代碼讀到 外鍵的時(shí)候,外鍵也要使用connection連接 這時(shí)就會(huì)拋出異常,所以

與數(shù)據(jù)進(jìn)行動(dòng)態(tài)交互,例如綁定到 Windows 窗體控件或組合并關(guān)聯(lián)來(lái)自多個(gè)源的數(shù)據(jù)。

對(duì)數(shù)據(jù)執(zhí)行大量的處理,而不需要與數(shù)據(jù)源保持打開的連接,從而將該連接釋放給其他客戶端使用。就使用DataSet或DataTable比較合適。

也許你不太明白,但是你可以這樣簡(jiǎn)單的記住,當(dāng)實(shí)體類或數(shù)據(jù)庫(kù)設(shè)計(jì)存在主外鍵關(guān)系的時(shí)候,使用Datareader就要謹(jǐn)慎了! 不過(guò)也沒關(guān)系,很多經(jīng)驗(yàn)都是從Debug學(xué)到的。

就好像微軟的視頻一樣,為愛Debug。

鏈接:http://www.cnblogs.com/Simcoder/archive/2010/05/03/1726295.html


網(wǎng)頁(yè)題目:ADO.NET入門五大你需要知道的對(duì)象
文章起源:http://m.5511xx.com/article/cdjhsdp.html