一、SqlConnection物件
第一次需要連線資料庫時要和伺服器握手,解析連線字串,授權,約束的檢查等等操作,而物理連線建立後,這些操作就不會去做了(預設使用了連線池技術)。
1 SqlConnection conn = new SqlConnection(connStr)
一個小技巧:測試資料庫是否能被成功連結,可以新建一個xxx.UDL檔案,開啟後輸入例項名和密碼,即可測試。
二 、SqlCommand物件
2.1 SqlCommand常用屬性
① CommandText 屬性
T-SQL語句或者儲存過程的名字。
② CommandType屬性
表示CommandText屬性種類。
常用值:Text(預設值,CommandText為T-SQL語句)
StoredProcedure (CommandText為儲存過程的名字)
③ Parameters屬性
是一個SqlParameterCollection物件,儲存用到的SqlParameter。
常用方法:SqlCommand.Parameters.Add(p);新增一個引數,p為一個SqlParameter物件
SqlCommand.Parameters.Add(ps);新增一個引數,ps為一個SqlParameter陣列
2.2 SqlCommand的三種execute方法
① SqlCommand.ExecuteNonQuery 方法
使用場景:update,insert,delete
返回值:受影響的行數,不是上邊三種情況或者回滾時返回-1。
對於 UPDATE、INSERT 和 DELETE 語句,返回值為該命令所影響的行數。如果正在執行插入或更新操作的表上存在觸發器,則返回值包括受插入或更新操作影響的行數以及受一個或多個觸發器影響的行數。對於所有其他型別的語句,返回值為 -1。如果發生回滾,返回值也為 -1。
② SqlCommand. ExecuteScalar 方法
使用場景:select
返回值:查詢結果集的首行首列值,型別為object。結果集為空時返回null。
③ SqlCommand.ExecuteReader 方法
特點:線上的,讀取過程必須和資料庫保持連線
使用場景:select
返回值:SqlDataReader物件
using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand com = new SqlCommand("select * from userinfo where id<@id", conn)) { conn.Open(); SqlParameter par = new SqlParameter("@id", System.Data.SqlDbType.Int) { Value = 100 }; com.Parameters.Add(par); SqlDataReader reader = com.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader["username"]);//資料庫中列名 Console.WriteLine(reader[1]);//1為索引 Console.WriteLine(reader.GetValue(1));//1為索引 } reader.Close();//釋放資源 Console.ReadKey(); } }
三、SqlDataAdapter物件
特點:離線方式,讀取整個結果集儲存在記憶體,不需要一直連線資料庫(自動開啟和關閉資料庫連線)
using (SqlConnection conn = new SqlConnection(connStr)) { SqlDataAdapter adpter = new SqlDataAdapter("select * from userinfo", conn); DataTable dt = new DataTable(); //SqlDataAdapter內部獲取資料是通過呼叫SqlDataReader來實現的 //執行Fill方法時,它會開啟到資料庫的SqlConnection, 建立或使用一個SqlCommand,使用SqlCommand.ExecuteReader()方法 //通過SqlDataReader從資料庫讀取資料, 結束行的讀取之後, SqlDataReader和SqlConnection會被關閉. adpter.Fill(dt); for (int i = 0; i < dt.Rows.Count; i++) { Console.WriteLine(dt.Rows[i]["username"]); } Console.ReadKey(); }