Ado.Net
阿新 • • 發佈:2020-07-17
一、Ado.Net 一種資料訪問技術,讓應用程式可以連線資料庫,並以各種方式來操作其中的資料。一個COM元件庫,.Net中的資料,優先選擇的資料訪問介面。 組成:DataSet---非連線的核心元件。獨立於任何資料來源的資料訪問,多種不同的資料來源 DataProvider(資料提供程式):用於連線資料庫、執行命令、檢索結果。 Connection 提供與資料來源的連線 SqlConnection Command 執行資料庫命令的物件 SqlCommand DataReader 從資料來源中提供快速的,只讀的資料流 SqlDataReader DataAdapter 提供DataSet物件與資料來源的橋樑。Fill Update Ado.Net訪問資料的步驟: 連線資料庫,開啟連線,建立執行命令物件(建立命令)執行命令 關閉連線 SqlConnection類 繼承於 DbConnection 抽象基類,不能被例項化。提供與SqlServer連線。 常用屬性:ConnectionString State DataBase DataSource State:Closed 已關閉、Open開啟、Connection 正在連線、Exxcuting 正在執行命令 Fetching 正在檢索、Broken 連線中斷1.建立連線 SqlConnection conn = new SqlConnection(); //開啟資料庫的鑰匙 conn.ConnectionString = "server=.;databse=PhoneBookDb;uid=rl;pwd=12345" 2.開啟連線 conn.Open(); 3.建立執行命令物件 conn.CreateCommand(); 4.執行命令 5.關閉連線 conn.Close();//關閉連線 連線字串: Sql server 身份驗證 Data Source 資料來源 Initial Catalog 資料庫名 User Id 賬號 PassWord 密碼 windows身份驗證 Data Source 資料來源 Initial Catalog 資料庫名 Integrated Security=True/SSPI或者 Trusted_Connection=True Oracle Data Source 資料來源 User Id 賬號 PassWord 密碼 MYSQL Data Source 資料來源 Initial Catalog 資料庫名 User Id 賬號 PassWord 密碼 Access Provider=Microsoft.Jet.OLEDB.4.0 Data Source 檔案絕對路徑 User Id PassWord 可以使用SqlConnectionStringBuild類來生成連線字串 為了程式的靈活性,一般配置到配置檔案中進行儲存App.config 配置到connectionString節點中using System.Configuration string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString 一般使用connectionString 連線池: 非常耗時耗力。經歷幾個階段:建立物理通道,與伺服器初次握手,分析連線字串,分身驗證 容器:存放一定數量的資料庫伺服器的物理連線。 需要:容器裡取出一條空閒的連線,而不是建立一條新的連線 作用:減少了連線資料庫的開銷,從而提高應用程式的效能。 分類:同一時刻同一應用程式域可以有多個不同型別的連線池 什麼標識來區分:程序、應用程式域、連線字串、windows標識共同組成 對同一程式域來說,由連線字串來區分 如何分配:根據連線請求的型別,找到與它相匹配的連線池,盡力的分配一條空閒的連線。 已達到了最大連線數,等待,直到有空閒的連線。 移除無效的連線,不能正確連線到資料庫伺服器的連線。連線池儲存的資料庫伺服器連線數量有限。無效連線應當移除,不然浪費連線池空間,連線池管理器自己會處理。 回收連線:釋放使用完的連線,應當即時關閉或釋放,conn物件的Close Dispose連接回連線池 連線池的使用:最大連線數:Max Pool Size 100 最小連線數:Min Pool Size 0 Pooling 是否啟用連線池 true pooling = falise是禁止啟用連線池 啟用連線池比不啟用連線池效率高很多 只要連線字串一樣,就會共用一個連線池 SqlCommand---適用於資料量小的 Connection:SqlCommand物件使用的SqlConnection CommandText:獲取或設定要執行的T-SQL語句或者儲存過程 CommandType:CommandType.Text--執行的是一個Sql語句 CommandType.StoredProcedure--執行儲存過程 Parameters:SqlCommand物件的命令引數集合、空集合 Transacction:獲取或設定要在其中執行的事務 SqlCommand cmd = new Command(sql,conn)---conn是連線物件 執行命令: cmd.ExecuteNonQuery()--執行T-SQL語句,並返回受影響的行數--命令型別 增刪改 --DML 拼接式sql,容易被SQL注入--conn必須是Open cmd.ExecuteScalar()--conn必須是Open 執行查詢語句或儲存過程,返回查詢結果中的第一列第一行,只返回一個值 查詢--DQL 也可以使用count(1)查詢返回的數量;查詢標識列:select @@identity cmd.ExecuteReader()--返回一個物件SqlDataReader--遊標-指標,只進不出,資料流、只讀 SqlParameter--SqlCommand物件的引數 DbType--引數的SqlDbType(資料型別沒資料庫的型別而言) Direction--引數的型別L輸入,輸出,輸入輸出,返回值引數 ParameterName--引數的名稱 Size 最大大小,位元組為單位 value 引數的值 SqlValue--作為SQL型別的引數的值 防止注入和轉義 注入和轉義怎麼解決 使用Parameter引數的傳遞來防止注入 SqlDataReader 提供一種從SQLSERVER資料庫中讀取只進的行流的方式。 特點:快速的、輕量的、只讀的,遍歷訪問每一行資料的資料流,向一個方向,一行一行的,不 能向後讀取,不能修改資料。 缺點:不靈活,只適合資料小的情況,讀取資料,一直佔用連線 讀取方式:Read()獲取第一行的資料,再次呼叫Read()方法 當呼叫Read()方法時返回False時,就表示不再有資料行。 注意:連線物件必須一直保持Open狀態,使用完成後,應該馬上呼叫close()關閉,不然Reader一直佔用連線。 建立方式:時不能直接構造的,cmd.ExecuteReader()來建立。關閉reader物件時,就會自動關閉連線。讀取時,儘量使用與資料庫欄位型別相匹配的方法來去的對應的值。 DataTable: DataSet:資料在記憶體中的快取(資料庫) Ado.Net核心元件。DataTable:記憶體中一個表 結合DataAdapter使用;列:DataColumn 行:DataRow 常用屬性:Columns 列集合 Rows 行的集合 Contains約束的集合 DataSet:DataTable所屬的DataSet 方法:AcceptChanges() 提交更改 RejectChanges() 回滾更改 Clear() 清空資料 Copy() 複製架構和資料 Clone() 只複製架構,不包含資料 DataSet:Ado.Net的核心元件 由一組DataTable組成 DataRelation:主外來鍵約束,唯一約束 SqlDataAdapter:介面卡(橋接器):DataSet資料之間檢索和儲存資料的橋樑。 SqlDataAdapter 和 SqlDataReader的 區別: 速度: 慢(資料少不明顯) 快 資料量: 大 小 記憶體: 大 小 連線: 斷開與連線 一直佔用 讀取方式: 一次載入到記憶體中 讀一條丟一條,只能進不能退 ,任意讀取,靈活 不靈活、不可修改 可修改 事務:一組操作,一次性提交,回滾,結果:成功,失敗 執行過程:開啟--成功就提交,失敗就回滾,事務放在儲存過程中
成功在commit tran 下return1,失敗在rollback tran回滾return 0,返回一個狀態 填充DataSet有引數和無引數,可以一個或多個結果集,在da.Fill前面加conn.Open()後面加conn.Close()這樣填充比較快