ADO.NET笔记
一、ADO.NET (Access Data Object, 數(shù)據(jù)訪問(wèn)對(duì)象)
.NET操作數(shù)據(jù)庫(kù)的一組類
1. DataSet (數(shù)據(jù)集)
2. .NET數(shù)據(jù)提供程序 (Data Provider)
2.1. Connection
2.2. Command
2.3. DataReader
2.4. DataAdapter
二、Connection (連接對(duì)象)
1. 創(chuàng)建:
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "連接字符串";
// 或:
SqlConnection conn = new SqlConnection(連接字符串);
2. 打開(kāi)連接:
conn.Open();
可能產(chǎn)生的異常:
2.1. 連接失敗:地址不對(duì),服務(wù)沒(méi)開(kāi),沒(méi)目標(biāo)數(shù)據(jù)庫(kù)
2.2. xx 登錄失敗:賬號(hào)不對(duì)、權(quán)限不足
2.3. 不支持關(guān)鍵字 xxx:連接字符串錯(cuò)誤
3. 連接字符串:
3.1. 地址、數(shù)據(jù)庫(kù)、賬號(hào)、密碼
3.2. Data Source=服務(wù)器地址; Initial Catalog=數(shù)據(jù)庫(kù)名; User Id=賬號(hào); Password=密碼
3.3. server=服務(wù)器地址; database=數(shù)據(jù)庫(kù)名; uid=賬號(hào); pwd=密碼
4. 連接實(shí)例:
string connStr = "server=.;database=MySchool;uid=sa;pwd=sa";
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
conn.Close();
三、Command (命令執(zhí)行對(duì)象)
1. 創(chuàng)建語(yǔ)法:
SqlCommand comm = new SqlCommand();
comm.CommandText = "SQL語(yǔ)句"; // 要執(zhí)行什么SQL?
comm.Connection = conn; // 在哪執(zhí)行?
// 或簡(jiǎn)寫為:
SqlCommand comm = new SqlCommand(sql, conn);
2. 執(zhí)行
2.1. ExecuteScalar()
2.2. ExecuteReader()
2.3. ExecuteNonQuery()
3. comm.ExecuteScalar():
3.1. Command開(kāi)始執(zhí)行目標(biāo)的SQL語(yǔ)句,并獲取數(shù)據(jù)庫(kù)返回的結(jié)果
3.2. 只獲取結(jié)果中的首行首列
3.3. 適用情況:
3.3.1. 聚合函數(shù):count、sum、max、min、avg
3.3.2. 根據(jù)條件查詢某一列的值
四、示例:查詢所有學(xué)生數(shù)量
// 1. 創(chuàng)建連接并打開(kāi)
string connStr = "server=.;database=MySchool;uid=sa;pwd=sa";
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
// 2. 創(chuàng)建執(zhí)行對(duì)象
string sql = "select count(1) from Student";
SqlCommand comm = new SqlCommand(sql, conn);
// 3. 執(zhí)行并返回結(jié)果
int count = (int)comm.ExecuteScalar();
// 或:
int count = Convert.ToInt32(comm.ExecuteScalar());
// 4. 關(guān)閉連接
conn.Close();
五、示例:根據(jù)年級(jí)編號(hào)查詢年級(jí)名稱
public string SelectGradeNameById(int gradeId)
{
string name = null;
// SQL語(yǔ)句
string sql = string.Format("SELECT GradeName FROM Grade WHERE GradeId={0}", gradeId);
SqlConnection conn = new SqlConnection(connStr); // 1. 創(chuàng)建連接
SqlCommand comm = new SqlCommand(sql, conn); // 2. 創(chuàng)建執(zhí)行對(duì)象
conn.Open(); // 3. 打開(kāi)連接
name = comm.ExecuteScalar().ToString(); // 4. 執(zhí)行并獲取結(jié)果
conn.Close(); // 5. 關(guān)閉連接
return name;
}
六、示例:根據(jù)學(xué)生編號(hào)查詢學(xué)生姓名
public string SelectStudentNameByNo(string studentNo)
{
string name = null;
//SQL語(yǔ)句
string sql = string.Format("SELECT StudentName FROM Student WHERE StudentNo='{0}'", studentNo);
SqlConnection conn = new SqlConnection(connStr); // 1. 創(chuàng)建連接
SqlCommand comm = new SqlCommand(sql, conn); // 2. 創(chuàng)建執(zhí)行對(duì)象
conn.Open(); // 3. 打開(kāi)連接
name = comm.ExecuteScalar().ToString(); // 4. 執(zhí)行并獲取結(jié)果
conn.Close(); // 5. 關(guān)閉連接
return name;
}
七、SQL執(zhí)行常見(jiàn)錯(cuò)誤
1. 不支持關(guān)鍵 xxx
2. xxx 附近有語(yǔ)法錯(cuò)誤
SQL語(yǔ)句錯(cuò)了
3. 列名 xxx 無(wú)效
SQL語(yǔ)句錯(cuò)了
4. Command需要一個(gè)已經(jīng)打開(kāi)的Connection
連接未打開(kāi)
八、示例:管理員登錄 (根據(jù)賬號(hào)和密碼,查詢?nèi)藬?shù))
public int AdminLogin(string username, string password)
{
int count = -1;
// SQL語(yǔ)句
string sql = " SELECT COUNT(1) FROM Admin WHERE Username='{0}' AND Password='{1}' ";
sql = string.Format(sql, username, password);
SqlConnection conn = new SqlConnection(connStr); // 1. 創(chuàng)建連接
SqlCommand comm = new SqlCommand(sql, conn); // 2. 創(chuàng)建執(zhí)行對(duì)象
conn.Open(); // 3. 打開(kāi)連接
count = Convert.ToInt32(comm.ExecuteScalar()); // 4. 執(zhí)行并獲取結(jié)果
conn.Close(); // 5. 關(guān)閉連接
return count;
}
轉(zhuǎn)載于:https://www.cnblogs.com/lecj2498/p/8185517.html
總結(jié)
- 上一篇: 面试题参考
- 下一篇: PHP初入--表单元素