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