一、簡介
1、ado.net是一門數據庫訪問技術。
他可以通過程序來操作數據庫
2、類庫
Connection 類
和數據庫交互,必須連接它。連接幫助指明
數據庫服務器、數據庫名字、用戶名、密碼,和連接數據庫所需要的其它參數。
Connection對象會被Command對象使用,這樣就能夠知道是在哪個數據源上面執行命令。
與數據庫交互的過程意味着必須指明想要執行的操作。這是依靠
Command對象執行的。開發人員使用Command對象來發送SQL語句給數據庫。Command對象使用Connection對象來指出與哪個數據源進行連接。開發人員能夠單獨使用Command對象來直接執行命令,或者將一個Command對象的引用傳遞給DataAdapter,它保存了一組能夠操作下面描述的一組數據的命令。
Command對象
成功與數據建立連接后,就可以用Command對象來執行查詢、修改、插入、刪除等命令;Command對象常用的方法有ExecuteReader()方法、ExecuteScalar()方法和ExecuteNonQuery()方法;插入數據可用ExecuteNonQuery()方法來執行插入命令。
DataReader類
許多數據操作要求開發人員只是讀取一串數據。DataReader對象允許開發人員獲得從Command對象的SELECT語句得到的結果。考慮性能的因素,從DataReader返回的數據都是快速的且只是“向前”的
數據流。這意味着開發人員只能按照一定的順序從數據流中取出數據。這對於速度來說是有好處的,但是如果開發人員需要操作數據,更好的辦法是使用DataSet。
DataSet對象
DataSet對象是數據在內存中的表示形式。它包括多個DataTable對象,而DataTable包含列和行,就象一個普通的數據庫中的表。開發人員甚至能夠定義表之間的關系來創建主從關系(parent-child relationships)。DataSet是在特定的場景下使用――幫助管理內存中的數據並支持對數據的斷開操作的。DataSet是被所有Data Providers使用的對象,因此它並不像Data Provider一樣需要特別的前綴。
DataAdapter類
某些時候開發人員使用的數據主要是只讀的,並且開發人員很少需要將其改變至底層的數據源。同樣一些情況要求在內存中緩存數據,以此來減少並不改變的數據被數據庫調用的次數。DataAdapter通過斷開模型來幫助開發人員方便的完成對以上情況的處理。當在一單批次的對數據庫的讀寫操作的持續的改變返回至數據庫的時候,DataAdapter 填充(fill)DataSet對象。DataAadapter包含對連接對象以及當對數據庫進行讀取或者寫入的時候自動的打開或者關閉連接的引用。另外,DataAdapter包含對數據的SELECT、INSERT、UPDATE和DELETE操作的Command對象引用。開發人員將為DataSet中的每一個Table都定義DataAadapter,它將為開發人員照顧所有與數據庫的連接。所以開發人員將做的工作是告訴DataAdapter什么時候裝載或者寫入到數據庫。
DataTable類
DataTable 是一個數據網格控件。它可以被應用在 VB 和
ASP 上。它無須代碼就可以簡單的綁定數據庫。它具有微軟風格的用戶界面。
DataTable的實例化以及添加列:
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
DataRow dr = dt.NewRow();
object[] objs = { 1, "Name" };
dr.ItemArray = objs;
dt.Rows.Add(dr);
this.dataGridView1.DataSource = dt;
二、建立與數據庫的連接
1、格式
先引用命名空間using System.Data.SqlClient;
//連接字符串。服務器:本地;數據庫:Data0216;用戶:sa;密碼:123
string sql = "server=.;database=Data0216;user=sa;pwd=123;";
//數據庫連接類
SqlConnection conn = new SqlConnection(sql);
//數據庫操作類
SqlCommand cmd = conn.CreateCommand();
//編寫Tsql語句
cmd.CommandText = "insert into Users values('tianqi','1234','田七','1','2003-2-1','N003')";
//打開數據庫
conn.Open();
//執行操作
cmd.ExecuteNonQuery();
//關閉數據庫
conn.Close();
三、完整的數據查詢,打印出來。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //連接字符串。服務器:本地;數據庫:Data0216;用戶:sa;密碼:123 string sql = "server=.;database=Data0216;user=sa;pwd=123;"; //數據庫連接類 SqlConnection conn = new SqlConnection(sql); //數據庫操作類 SqlCommand cmd = conn.CreateCommand(); //編寫Tsql語句 cmd.CommandText = "select *from Users"; //打開數據庫 conn.Open(); //執行操作用SqlDataReader類dr接收一下 SqlDataReader dr = cmd.ExecuteReader(); int count = 0; //判斷查詢結果是否有行(是否有數據) if (dr.HasRows) { //dr.Read();讀取下一行數據,如果有返還true,如果沒有返回false。用一個死循環來打印數據,如果讀取不到下一行的數據則循環結束。 while (dr.Read()) { count++; //將讀取到該行數據的Ids列提取出來放到字符串ids中 string ids = dr["Ids"].ToString(); string username = dr["UserName"].ToString(); string password = dr["PassWord"].ToString(); string nickname = dr["NickName"].ToString(); string sex = dr["Sex"].ToString(); string birthday = dr["Birthday"].ToString(); string nation = dr["Nation"].ToString(); Console.WriteLine(ids + " | " + username + " | " + password + " | " + nickname + " | " + sex + " | " + birthday + " | " + nation); } } Console.WriteLine("一共有" + count + "行數據"); //關閉數據庫 conn.Close(); Console.ReadLine(); } } }
四、完整的數據刪除,將數據刪除成功與否返回給用戶
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { string sql = "server=.;database=Data0216;user=sa;pwd=123;"; SqlConnection conn = new SqlConnection(sql); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "delete from Users where UserName='zhangsan';"; conn.Open(); //執行操作,將受影響行數返回一個int類型接受一下 int a = cmd.ExecuteNonQuery(); //如果受影響行數大於0,則刪除成功,否則刪除失敗 if (a > 0) Console.WriteLine("刪除成功,本次共刪除" + a + "行"); else Console.WriteLine("刪除失敗,本次未刪除任何數據!"); conn.Close(); Console.ReadLine(); } } }
五、完整的數據修改,先查詢數據庫中有沒有用戶要修改的數據。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { bool has = false; string sql = "server=.;database=Data0216;user=sa;pwd=123;"; SqlConnection conn = new SqlConnection(sql); SqlCommand cmd = conn.CreateCommand(); Console.Write("請輸入要修改的用戶名:"); string name = Console.ReadLine(); //先查詢一下數據庫中是否有用戶要修改的這條數據 cmd.CommandText = "select * from users where username='"+name+"'"; conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); //如果數據庫中有用戶要修改的這條數據,給has一個true值 if (dr.HasRows) { has = true; } conn.Close(); //如果數據庫中有用戶要刪除的這條數據,再提示用戶要修改的內容 if (has == true) { Console.WriteLine("已查到此用戶"); Console.Write("請輸入修改后的密碼:"); string password = Console.ReadLine(); Console.Write("請輸入修改后的昵稱:"); string nickname = Console.ReadLine(); Console.Write("請輸入修改后的性別:"); string sex = Console.ReadLine(); Console.Write("請輸入修改后的生日:"); string birthday = Console.ReadLine(); Console.Write("請輸入修改后的民族:"); string nation = Console.ReadLine(); //修改數據的sql語句 cmd.CommandText = "update Users set PassWord='"+password+"',NickName='"+nickname+"',Sex='"+sex+"',Birthday='"+birthday+"',Nation='"+nation+"' where UserName='"+name+"'"; //再次打開數據庫 conn.Open(); //用aaa記一下受影響行數 int aaa= cmd.ExecuteNonQuery(); //關閉數據庫 conn.Close(); if (aaa > 0) Console.WriteLine("修改成功"); else Console.WriteLine("修改失敗"); } //如果查詢不到用戶要修改的數據,提示用戶無法修改。 else Console.WriteLine("未查到此用戶,無法修改"); Console.ReadLine(); } } }
六、完整的數據添加
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { string name = ""; string password = ""; string nickname = ""; string sex = ""; string birthday = ""; string nationcode = ""; string sql = "server=.;database=Data0216;user=sa;pwd=123;"; SqlConnection conn = new SqlConnection(sql); SqlCommand cmd = conn.CreateCommand(); //判斷用戶名是否被占用且不能為空,如果未被占用且不為空將用戶輸入的用戶名放在name中,跳出循環 while (true) { Console.Write("請輸入用戶名:"); name = Console.ReadLine(); cmd.CommandText = "select *from Users where UserName='" + name + "'"; conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (!dr.Read() && name.Length != 0) { conn.Close(); break; } } //判斷密碼是否大於6位 while (true) { Console.Write("請輸入密碼:"); password = Console.ReadLine(); if (password.Length >= 6) { break; } } //判斷昵稱是否為空 while (true) { Console.Write("請輸入昵稱:"); nickname = Console.ReadLine(); if (nickname.Length > 0) { break; } } //判斷性別輸入,輸入男將1記錄到數據庫中,輸入女將0記錄到數據庫中 while (true) { Console.Write("請輸入性別(男/女):"); sex = Console.ReadLine(); if (sex == "男" || sex == "女") { if (sex == "男") sex = "1"; else sex = "0"; break; } else Console.WriteLine("輸入的格式不正確,請重新輸入"); } //判斷輸入的生日格式是否正確 while (true) { Console.Write("請輸入生日:"); birthday = Console.ReadLine(); try { Convert.ToDateTime(birthday); break; } catch { Console.WriteLine("輸入的格式不正確,請重新輸入"); } } //判斷輸入的民族在該數據庫中是否有此記錄 while (true) { Console.Write("請輸入民族:"); string nation = Console.ReadLine(); //從民族表中查詢用戶輸入的民族對應的民族編號 cmd.CommandText = "select NationCode from UserNation where NationName='" + nation + "'"; conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); //如果查詢到該記錄,則把民族編號提取出來,關閉數據庫並跳出循環 if (dr.Read()) { nationcode = dr["NationCode"].ToString(); conn.Close(); break; } //如果查詢不到該記錄,提示一下用戶,關閉數據庫,繼續循環。 else { conn.Close(); Console.WriteLine("記錄暫無此民族,請輸入其他民族"); } } //添加數據的sql語句 cmd.CommandText = "insert into Users values('" + name + "','" + password + "','" + nickname + "','" + sex + "','" + birthday + "','" + nationcode + "')"; conn.Open(); int a = cmd.ExecuteNonQuery(); if (a == 1) Console.WriteLine("數據已經添加進去"); else Console.WriteLine("該條數據未添加進去!"); conn.Close(); Console.ReadLine(); } } }