ADO.NET 的主要組件
ADO.NET 結構圖
.NET 數據提供程序類型
.NET Framework 數據提供程序 |
說 明 |
SQL Server .NET 數據提供程序 |
Microsoft SQL Server 數據源 System.Data.SqlClient 命名空間 |
OLE DB .NET 數據提供程序 |
Access 、OLE DB 公開的數據源 System.Data.OleDb 命名空間 |
ODBC .NET 數據提供程序 |
ODBC 公開的數據源 System.Data.Odbc 命名空間 |
Oracle .NET 數據提供程序 |
Oracle 數據源 System.Data.OracleClient 命名空間 |
Connection 對象
命名空間 |
對應的 Connection 對象 |
System.Data.SqlClient |
SqlConnection |
System.Data.OleDb |
OleDbConnection |
System.Data.Odbc |
OdbcConnection |
System.Data.OracleClient |
OracleConnection |
1 // 定義數據庫連接字符串 2 string connString = 3 "Data Source= . ;Initial Catalog=MySchool;User ID=jbit;pwd=bdqn"; 4 5 // 創建 Connection 對象 6 SqlConnection connection = new SqlConnection(connString); 7 8 // 打開數據庫連接 9 connection.Open(); 10 Console.WriteLine("打開數據庫連接成功"); 11 12 //關閉數據庫連接 13 connection.Close(); 14 Console.WriteLine("關閉數據庫連接成功");
Connection 主要成員
屬性名稱 |
說 明 |
ConnectionString |
連接字符串 |
方法 |
說 明 |
Open() |
打開數據庫連接 |
Close() |
關閉數據庫連接 |
必須顯式關閉連接
另一種實現:自動關閉數據
using (SqlConnection conn = new SqlConnection(ConnStr)) { //代碼塊 }
tip:當執行完該using(){}后,數據庫連接就會自動關閉
連接數據庫步驟
使用ADO.NET連接數據庫的步驟
1.定義連接字符串
Data Source=服務器名;Initial Catalog=數據庫名; User ID=用戶名;Pwd=密碼
2. 創建 Connection 對象
SqlConnection connection = new SqlConnection(connString);
3. 打開與數據庫的連接
connection.Open( );
示例代碼:
// 連接字符串 string connString = "Data Source=.;Initial Catalog=pubs;User ID=sa"; // 創建Connection 對象 SqlConnection connection = new SqlConnection(connString); connection.Open( ); // 打開數據庫連接 //…… connection.Close( ); // 關閉數據庫連接
Command
Command 的主要成員
屬性名稱 |
說明 |
Connection |
Command對象使用的數據庫連接 |
CommandText |
執行的SQL語句 |
方法 |
說 明 |
ExecuteNonQuery() |
執行不返回行的語句,如UPDATE等 |
ExecuteReader() |
返回DataReader對象 |
ExecuteScalar() |
返回單個值,如執行帶COUNT(*)的SQL語句 |
使用 Command 步驟
1. 創建數據庫連接
2. 定義 SQL 語句
3. 創建 Command 對象(執行命令前,必須打開數據庫連接!)
4. 執行命令
1 SqlConnection connection = new SqlConnection(connString); 2 string sql = "select count(*) from Admin where LoginId=' " + userName 3 + " ' and LoginPwd=' " + pwd + " ' "; 4 connection.Open(); // 打開數據庫連接 5 SqlCommand command = new SqlCommand(sql, connection); 6 int num = (int)command.ExecuteScalar();
總結
一、.NET數據提供程序包括四個核心對象
Connection
Command
DataAdapter
DataReader
二、Connection對象用於建立應用程序和數據庫之間的連接
三、Command對象的ExecuteScalar()方法可以檢索數據庫並返回一個值
四、數據庫操作過程中可能出現異常,可以使用try-catch-finally語句處理異常
DataAdapter和DataReader的區別
SqlDataReader 高效,功能弱,只讀訪問
SqlDataAdapter 強大,要求資源也大一點
SqlDataReader 只能在保持跟數據庫連接的狀態下才可以讀取。。。
SqlDataAdapter 大多情況下是一次性讀取一個表,然后填充到DataSet中,然后就可以斷開跟數據庫的連接了。(可以理解查詢出來的數據都放到的內存中)
兩者區別主要是 在線 和 離線 的區別。。。。。
使用ADO.NET查詢和操作數據
StringBuilder類
StringBuilder類: 用來定義可變字符串
方法 |
說明 |
StringBuilder Append(string value ) |
在結尾追加 |
StringBuilder Insert(int index, string value ) |
在指定位置插入指定字符串 |
StringBuilder Remove(int startIndex, int length ) |
移除指定字符串 |
以下SQL語句哪個可讀性更高,更易修改?
代碼一
SELECT SubjectNo,SubjectName,ClassHour,Grade FROM Subject
代碼二
SELECT
[ SubjectNo ],
[ SubjectName ],
[ ClassHour ],
[ Grade ]
FROM
[ Subject ]
答案肯定是第二種
優勢舉例
常規
string strText = "Hello"; strText += "World"; Console.WriteLine( strText );
優化后
使用StringBuilder類修改上述代碼
StringBuilder sbTest = new StringBuilder(); sbTest.Append("Hello"); sbTest.Append("World"); Console.WriteLine(sbTest .ToString ()); Console.ReadLine();
使用StringBuilder后,感覺代碼更多了,我們為什么還要用它呢?
其實,我們在“常規”聲明的string變量在2次賦值時,程序是給變量划分了2個內存空間,對計算機性能有損耗!
精准的說:“常規”每次修改strText,不是追加而是都要創建一個 新的字符串對象,如果用StringBuilder sbTest = new StringBuilder();創建對象做為變量,他不會有內存損耗,同樣系統也不會多次創建對象。
DataReader讀取數據庫
DataReader 對象
1.從數據源中檢索只讀、只進的數據流
2.每次讀取一行數據
命名空間 |
對應的 DataReader 對象 |
System.Data.SqlClient |
System.Data.OracleClient |
System.Data.OleDb |
OleDbDataReader |
System.Data.Odbc |
OdbcDataReader |
System.Data.OracleClient |
OracleDataReader |
要查詢多行多列的數據,需要使用Command對象的ExecuteReader( )方法
1 SqlDataReader reader = comm.ExecuteReader();//獲得DataReader對象 2 //… 3 //循環讀取數據行並顯示 4 while (reader.Read()) 5 { 6 sb1.AppendFormat("{0}\t{1}", reader["StudentNo"], 7 reader["StudentName"]); 8 Console.WriteLine(sb1); 9 sb1.Length = 0; 10 } 11 //… 12 reader.Close(); //關閉DataReader
DataReader 的主要成員
屬性 |
說明 |
HasRows |
是否返回了結果 |
方法 |
說明 |
Read |
前進到下一行記錄 |
Close |
關閉 DataReader 對象 |
DataReader 使用后必須關閉
DataReader 使用步驟
使用 DataReader 檢索數據的步驟
1. 創建 Command 對象
2. 調用 ExecuteReader() 創建 DataReader 對象
3. 使用 DataReader 的 Read() 方法逐行讀取數據
4. 讀取某列的數據,(type)dataReader[ ]
5. 關閉 DataReader 對象
讀取某列的數據,(type)dataReader[ ]
獲取某列的值:
方法一:指定列的索引,從0開始
方法二:指定列名
操作數據
使用SqlCommand對象的ExecuteNonQuery() 方法向數據庫增加記錄
1 StringBuilder sb = new StringBuilder(); 2 sb.AppendLine("INSERT INTO"); 3 sb.AppendLine(" [Grade]"); 4 sb.AppendLine("VALUES"); 5 sb.AppendLine(" ('" + gradeName + "')"); 6 7 // 創建command對象 8 SqlCommand command = new SqlCommand(sb.ToString(), conn); 9 // 執行命令 10 command.ExecuteNonQuery(); 11 //……
ExecuteNonQuery()方法小結
1.該方法執行指定的 SQL 語句
2.返回受影響的行數
使用 ExecuteNonQuery() 的步驟
1.創建 Connection 對象
2.定義SQL語句
3.創建 Command 對象
4.執行 ExecuteNonQuery() 方法
5.根據返回的結果進行處理
總結
一、DataReader對象是一個只進、只讀的數據流,每次從數據源中提取一條記錄
二、通過Command對象的ExecuteReader()方法返回一個DataReader對象
三、使用Command對象的ExecuteNonQuery()方法可以執行數據源數據的增刪改操作