ADO.NET是.NET數據庫的訪問架構,ADO.NET是數據庫應用程序和數據源之間的溝通的橋樑,提供一個面向對象的數據訪問架構,用來開發數據庫應用程序。提供對象,對象封裝了操作數據庫的方法
組成:
-
.Net Framework數據提供程序
-
數據集 DataSet
ADO.NET結構
五大類庫:
Connection 用於建立與數據庫的鏈接
Command 用於執行SQL語句 三個常用方法:
ExecuteNonQuery :用於增刪改,返回受影響的行數
ExecuteReader:執行查詢,返回一個SqlDataReader對象
ExecuteScalar:執行查詢,並返回首行首列
DataReader 用於讀取數據
DataAdapter 用於填充吧數據填充到DataSet
DataSet 數據集 ,用於程序中
程序訪問數據庫方法步驟
①創建一個到數據庫的鏈接--- >②打開數據庫鏈接--- > ③創建ADO記錄集--- > ④從記錄中提取需要的數據--- >⑤關閉記錄集--- >⑥關閉鏈接
使用ADO.NET需要在程序中引用System.Data.SqlClient,其中包含了對Sql Server進行操作的數據訪問類
- SqlConnection 鏈接數據庫
- SqlCommand 數據庫命名對象
- SqlCommandBuilder 生成SQL命令
- SqlDataReader 數據讀取器
- SqlDataAdapter 數據適配器 填充DataSet
- SqlParameter 為存儲過程定義參數
- SqlTransaction 數據庫事務
class Program
{
static void Main(string[] args)
{
//數據庫連接字符串
string sql = "server =;database=TEST; user =; pwd=;";
SqlConnection conn = new SqlConnection(sql); //創建連接實例化對象,連接數據源
SqlCommand cmd = conn.CreateCommand();//數據庫操作類
cmd.CommandText = "select *from SQL_T go delete from SQL_T where 姓名='Tom'"; //編寫數據庫語句
conn.Open(); //打開數據庫連接,操作數據庫數據
//DataReader數據讀取器,ExcuteReader 獲得數據
SqlDataReader dr = cmd.ExecuteReader();//
int count = 0;
if(dr.HasRows)
{
while(dr.Read())
{
count++;
string id = dr["ID"].ToString();
string name = dr["姓名"].ToString();
string classname = dr["班級"].ToString();
string score = dr["分數"].ToString();
Console.WriteLine(id + "|" + name+"|"+classname+"|"+score);
}
}
Console.WriteLine("一共有"+ count + "行數據");
//刪除
cmd.CommandText = "delete from SQL_T where 姓名='Tom';";
int a = cmd.ExecuteNonQuery(); //ExecuteNonQuery返回受影響的行數
if(a>0)
{
Console.WriteLine("刪除了"+ a +"行");
}else{
Console.WriteLine("刪除失敗");
}
conn.Close(); //接受連接有限,使用完關閉連接
Console.ReadLine();
}
}
DataAdapter數據適配器 填充DataSet
class DataAdapter
{
static void Main(string[] args)
{
DataSet dataSet = new DataSet();
using(sqlConnection conn = new sqlConnection(""))
{
conn.Open();
SqlCommand command = conn.CreateCommand();
command.CommandText = "select*from SQL_T";//編寫數據庫語句
SqlDataAdapter dataAdapter = new SqlDataAdapter(command);//創建SqlDataAdapter對象 並執行sql
dataAdapter.Fill(dataSet);//填充數據
}
}
}
/// <summary>
/// 使用SqlCommandBuilder對數據增刪改查
/// </summary>
private static void SqlCommandBuilder()
{
using (sqlConnection conn = new sqlConnection(""))
{
conn.Open();
SqlCommand command = conn.CreateCommand();
command.CommandText = "select*from SQL_T";//編寫數據庫語句
SqlDataAdapter da = new SqlDataAdapter(command);
DataSet ds = new DataSet();
da.Fill(ds);
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da);//作用是將DataSet增加的數據轉化為SQL語句來跟新數據庫
DataRow row = ds.Tables[0].NewRow();//添加行,實例化一個行對象
row[0] = "11";
row[1] = "22";
ds.Tables[0].Rows.Add(row); //添加到表中
ds.Tables[0].Rows[1] = ""; //修改數據
ds.Tables[0].Rows[2].Delete();//刪除數據
da.Update(ds); //將DataSet中表和數據庫進行對比更新
}
}
DataReader 和DataAdapter 區別
SqlDataReader :
-
只能讀取數據庫,而且所有操作必須處於連接狀態,但是要對數據庫進行操作時,只能藉助SqlCommand類。
-
一次只在內存中讀取一行,減少系統開銷
-
讀取時需通過自身Read()方法循環讀取數據到指定對象
-
需要通過調用自身 Close()方法斷開連接
SqlDataAdapter:
-
建立在SqlCommand對象之上,具有SqlCommand類的一切功能,能夠將數據填充到DataSet對象中,而且不需要再連接到數據庫,可以直接從DataSet或DataTable中獲取數據
-
可通過Fill()方法一次性填充數據到DataSet
-
讀取完數據庫後自動斷開連接
DataSet DataTable DataRow
DataSet DataSet是不依賴於數據庫的獨立數據集合,即關閉數據庫依然可以使用,DataSet裡面可以存儲多個表(DataTable) DataTable 表示內存中數據的一個表,存儲在內存中的表,在持久化(dataAdapter.Update)到數據庫之前,是不會對數據庫產生影響的 DataTable 成員DataRow DataTable是由一個個DataRow組成而成。DataTable.Row[i]即表示其中的第i行 DataRowState 是DataRow中一個很重要的狀態包括(Added添加、Deleted刪除、Detached分離、Modified修改、Unchange未改變)