ADO.Net組件(用的少),建立c# 與數(shù)據(jù)庫(kù)的連接
一脖苏、ADO.Net = .Net數(shù)據(jù)提供程序 + DataSet
ADO.Net 五大對(duì)象:
1程拭、Connection:負(fù)責(zé)程序和DB之間的聯(lián)系
2、Command:負(fù)責(zé)執(zhí)行SQL命令(查詢棍潘、修改恃鞋、插入崖媚、刪除等命令)
3、DataReader:數(shù)據(jù)閱讀器恤浪,負(fù)責(zé)讀取查詢結(jié)果(Select語(yǔ)句)
4畅哑、DataAdapter:數(shù)據(jù)適配器,從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)水由,再填充到本地?cái)?shù)據(jù)集中荠呐。同時(shí),我們可以利用DataAdapter砂客,再將數(shù)據(jù)反向從DataSet中更新回?cái)?shù)據(jù)庫(kù)
5泥张、DataSet:內(nèi)存中的數(shù)據(jù)集
二、使用
由于數(shù)據(jù)庫(kù)連接是非托管資源鞠值,GC并不能自動(dòng)回收媚创,所以在執(zhí)行完成后要手動(dòng)釋放。
static void Main(string[] args)
{
var conStr = "server=127.0.0.1;database=huangdemo;user=root;pwd=123456";
//1-- DataReader 數(shù)據(jù)閱讀器(并不保存數(shù)據(jù))彤恶,負(fù)責(zé)讀取查詢結(jié)果
using (MySqlConnection mySql = new MySqlConnection(conStr))
{
mySql.Open();
MySqlCommand command = new MySqlCommand("select * from stu", mySql);
MySqlDataReader result = command.ExecuteReader();
while (result.Read()) //讀取下一行钞钙,有記錄返回true,沒有就false
{
Console.WriteLine("年齡:" + result["age"] + "声离,姓名:" + result["name"]);
}
result.Dispose();
command.Dispose();
}
//2-- DataAdapter數(shù)據(jù)適配器, DataSet數(shù)據(jù)集(類似于一個(gè)在內(nèi)存中數(shù)據(jù)庫(kù))
using (MySqlConnection con = new MySqlConnection(conStr))
{
con.Open();
MySqlCommand command = new MySqlCommand("select * from stu", con);
MySqlDataAdapter adapter = new MySqlDataAdapter(command);
//方式一
DataSet dbSet = new DataSet("test_db");
adapter.Fill(dbSet);
DataTable dt = dbSet.Tables[0];
foreach (DataRow it in dt.Rows) //dt.Rows : 遍歷數(shù)據(jù)行芒炼,每一行是一條記錄(對(duì)象)
{
Console.WriteLine(it["name"].ToString() + "," + it["age"].ToString() + "术徊," + it["sex"].ToString());
}
//方式二焕议,adapter直接填充DataTable
DataTable dt1 = new DataTable();
adapter.Fill(dt1);
foreach (DataRow it in dt1.Rows) //dt.Rows : 遍歷數(shù)據(jù)行,每一行是一條記錄(對(duì)象)
{
Console.WriteLine(it["name"].ToString() + "弧关," + it["age"].ToString() + "盅安," + it["sex"].ToString());
}
adapter.Dispose();
command.Dispose();
}
}
三、DataSet 結(jié)構(gòu)與使用
1世囊、定義數(shù)據(jù)集及其數(shù)據(jù)表别瞭、數(shù)據(jù)列、數(shù)據(jù)行的類都在系統(tǒng)的System.Data命名空間下株憾,之間的關(guān)系如下圖:
2蝙寨、基本使用:
//類似數(shù)據(jù)庫(kù)
DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.Tables.Add(dt);
//添加自增主鍵
DataColumn dcId = new DataColumn("id",typeof(int));
DataColumn dcName = new DataColumn("name", typeof(string));
dt.Columns.Add(dcId );
dt.Columns.Add(dcName );
//添加一行數(shù)據(jù)
DataRow row = dt.NewRow();
row["dcId "] = 1;
row["dcName"] = "Tom";
dt.Rows.Add(row);
3、更新數(shù)據(jù)回?cái)?shù)據(jù)庫(kù)(crud)
1.在DataSet的DataTable中添加一行數(shù)據(jù)
DataRow row = DataSet對(duì)象.Tables[“表名"].NewRow();
row[“列名”] = 值;
或刪除DataSet中的選中行 :
DataSet對(duì)象.Tables[“表名”].Rows[行索引].Delete();
2.創(chuàng)建SqlCommandBuilder對(duì)象
SqlCommandBuilder builder = new SqlCommandBuilder(DataAdapter對(duì)象);
3.使用DataAdapter對(duì)象的Update()方法執(zhí)行更新
DataAdapter對(duì)象.Update(DataSet對(duì)象, “表名");