《C#語言和數據庫技術基礎》
第一章
1..NET Framework 框架
2.sharp 尖銳,強烈的
3.application 應用程序
4.developer 開發者
5.network 網絡
6.build 創建,構造
7.console 控制檯
8.debug 調試
9.namespace 命名空間
10.project 項目
11.solution 解決方案
12.watch 監視
第二章
1.break 中斷
2.continue 繼續
3.switch 開關,選擇結構
4.array 數組
5.each 每一個
6.while 一下子,時間
第三章
1.private 私人
2.public 公開
3.get 獲得
4.set 設置
5.value 價值
6.this 這,這個
7.property 屬性
8.ref 參考
第四章
1.format 格式
2.equals 等於
3.convert 轉換
4.index 索引
5.join 加入
6.split 分裂
7.substring 子鏈,鏈接
8.trim 修剪,整理
第六章
1.database 數據庫
2.edition 版本
3.studio 工做室
4.analysis 分析
5.table 表
6.relationship 關係
7.management 管理
8.administrator 管理員
9.record 記錄
10.row 行
11.entity 實體
12.transaction 事物
13.DBMS 數據庫管理系統
14.DBS 數據庫系統
15.DBA 數據庫管理員
第七章
1.constraint 約束
2.primary 初級
3.binary 二進制
4.foreign 國外的有
5.check 檢查
6.course 課程
7.score 評分
第八章
1.structured 結構
2.query 查詢
3.language 語言
4.transact 辦理
5.insert 插入
6.update 更新
7.delete 刪除
8.truncate 截斷
9.employee 員工人數
10.default 默認
11.manipulation 操縱
12.definition 定義
第九章
1.recordset 記錄設置
2.order 訂購
3.null 空
4.trim 修剪
5.replace 替換
6.floor 樓層
7.ceiling 天花板
8.round 回合
9.convert 轉換
10.length 長度
第十章
1.between 在…之間
2.business 業務範圍
3.count 計數
4.landlord 房東
5.exchange 交流
6.salary 工資
7.education 教育
第十一章
1.group 組
2.join 加入
3.left 左
4.right 右
5.outer 外
6.client 客戶端
第十三章
1.online 在線
2.nickname 暱稱
3.province 省
4.relation 關係
5.base 基地
6.master 主人,僱主
第十四章
1.active 活動
2.object 爸爸,對象
3.connection 鏈接
3.command 命令
4.execute 執行
5.query 查詢
6.scalar 標量
第十五章
1.operation 操做
2.read 閱讀
3.append 附加
4.manager 經理
5.grade 等級
第十七章
1.primary 初級
2.reference 參考
3.check 檢查
4.handle 句柄,把柄
5.online 在線
6.level 級別
第一章
第一個C#程序
本章技能目標
1.掌握簡單C#程序的開發步驟
2.掌握C#中的變量類型及命名規則
3.使用Console類實現控制檯輸入輸出信息
4.掌握C#中定義類、對象和方法的語法
★1..NET與C#
1..NET概述與C#應用
2.ID環境
★2.第一個C#程序
▲1.新建程序
1.啓動Visual Studio 2012
2.新建項目
3.生成可執行文件
4.開始運行
新建項目
1.在Visual Studio 菜單欄中選擇「文件」→「項目」選項,打開「新建項目」
2.在左側的項目類型中選擇「Visual C#」,在右側的模板列表中選擇
「控制檯應用程序」。
3.在「名稱」中輸入「HelloWorld」。
4.爲項目選擇一個保存的位置,例如D:\。
5.在Main()方法中添加以下代碼。
Console.WriteLine(「Hello World」);
Console.ReadLine();
經驗
1.運行的快捷鍵:F5:啓動。
2.運行的快捷鍵:Ctrl+F5:開始執行不調試。
★3.認識控制檯應用程序文件夾的結構
看不到解決方案資源管理器怎麼辦?
1.在Visual Studio的菜單中選擇 「視圖」→ 「解決方案資源管理器」選項,
就能夠顯示了,快捷鍵爲Ctrl+Alt+L。
2.在Visual Studio的菜單中選擇 「工具」 → 「選項」選項,打開 「選項」
對話框,在左邊選擇「項目和解決方案」,在右邊選中「老是顯示解決方案」
複選框便可。1.在Visual Studio的菜單中選擇 「視圖」→ 「解決方案資源
管理器」選項,就能夠顯示了,快捷鍵爲Ctrl+Alt+L。
3.在Visual Studio的菜單中選擇 「工具」 → 「選項」選項,打開 「選項」
對話框,在左邊選擇「項目和解決方案」,在右邊選中「老是顯示解決方案」
複選框便可。
★4.認識C#程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace HelloWorld
{
class Program
{
static void Main(string[ ] args)
{
Console.WriteLine("Hello World");
Console.ReadLine();
}
}
}
1.namespace
namespace(命名空間)是C#中組織代碼的方式,它的做用相似於Java中的package
(包)。
2.using
在Java中,若是導入其餘包,應該使用import。而在C#中,使用using來引用其
他命名空間。
3.class
與Java同樣
4.Main()方法
與Java同樣,但C#中的Main()方法首字母必須大定民,Main()方法的返回值能夠
是void或者int類型。
C# 的 Main( ) 方法
Main 首字母大寫
返回值能夠爲 void 或者 int
命令行參數是可選的
四種 Main() 方法:
static void Main ( string[ ] args ) { }
static int Main ( string[ ] args ) { }
static void Main ( ) { }
static int Main ( ) { }
對比:
組織代碼方式:C#使用命名空間(namespace),Java使用包(package)
引入命名空間或包的關鍵字:C#使用using,Java使用import
程序入口:C#的Main()有四種形式,Java的main()有一種形式。
★5.C#中的變量和常量
1.C#中數據類型
經常使用數據類型
Java C#
整型 int int
浮點型 float float
字符串 String string
布爾型 boolean bool
2.C#中的變量
語法:
數據類型 變量名稱;
C#的變量命名規則:
C#的變量命名規則與Java也基本相同,只是「$」符號在C#中是不能使用的,所以變
量的命名規則能夠簡單總結爲如下三條。
1.組成:52個英文字母(A~Z,a~z),10個數字(0~9),下劃線(_),除此之
外不能含有其餘的字符。
2.開頭:只能以字母或下劃線開頭。
3.不能使用的:不能是C#中的關鍵字。
C#的變量的命名規範:
1.變量的名稱要有意義
2.避免使用單個字符做爲變量名
3.當使用多個單詞組成變量名時,應該使用駱駝(Camel)命名法。
★6.爲何使用常量
下面代碼的輸出結果是什麼?
static void Main(string[] args)
{
int dayMax = 7;
int today = 1;
Console .WriteLine("一週有幾天:" );
Console .WriteLine(dayMax );
Console .WriteLine("今天是周:" );
dayMax = dayMax +1;
Console .WriteLine(dayMax );
}
語法正確可邏輯錯誤如何避免?
使用常量能夠很容易的避免這種錯誤
★7.什麼是常量
const 數據類型 常量名稱 = 值;
常量命名規則:
1.有意義
2.均大寫
3.長度不宜長
何時使用常量?
1.多處用到(用於在程序中被常常引用的值)
2.其值不易理解(例如一個程序中屢次用到的值0或1)
3.其值不變(用於在程序中一旦設定就不容許被修改的值)
★8.Console類
向控制檯輸出:
Console.WriteLine()方法——輸出後換行
Console.Write()方法——輸出後不換行
從控制檯讀入:
Console.ReadLine();
返回值爲string類型
向控制檯輸出的幾種方式
Console.WriteLine();// 至關於換行
Console.WriteLine(要輸出的值);// 輸出一個值
Console.WriteLine("格式字符串", 變量列表);
string course = "C#"; //課程名稱
……
Console.WriteLine( "個人課程名稱是:" + course);
Console.WriteLine( "個人課程名稱是:{0}" , course );
Console.ReadLine();
{0}:佔位符
依次使用{0}、{1}、{2}…與變量列表中的變量對應
能夠在字符串中使用 \n 、 \t 來控制換行或製表
讀取一行並返回字符串( string) 類型
Console.ReadLine( );
讀取整數
int.Parse (Console.ReadLine());//表示將字符串轉換爲整數
★9.類和對象
什麼是方法?使用方法有什麼好處?
類的行爲,便於修改、增長可讀性、可重用、封裝…
訪問修飾符 返回類型 方法名 ( 參數列表 )
{
// 方法的主體…
}
註釋類型
Java C#
行註釋 // … // …
塊註釋 /*… /*…
*/ */
文檔註釋 /**… /// …
*/ /// …
經驗
將每一個方法都摺疊成一句並提供說明,作法是:把方法的代碼寫在
#region和#endregion之間。在#region後面就能夠添加說明。
規範
1.關鍵性的語句要使用註釋,如變量聲明、條件判斷、循環等。
2.類名前應使用文檔註釋,說明類的簡單功能和使用方法。
3.方法前應使用註釋,說明方法的功能、參數的含義、返回值等。
★10.Visual Studio調試技巧
▲1.設置斷點(斷點:breakpoint)
小技巧
程序調試時經常使用快捷鍵以下
1.F5--開始調試
2.Shift+F5--中止調試
3.F9--設置或刪除斷點
4.Ctrl+F9--取消斷點
5.F10--單步執行
6.F2--轉到所調用過程或變量的定義。
7.Ctrl+F2--將焦點轉移到類的下拉框。
▲2.監視變量值
將變量添加到監視窗口的二種方法
1.選中並右擊須要關注的變量,如對象student的成員,選擇快捷菜單佔的
"添加監視"命令。
2.在監視1窗口中單擊名稱下的空白單元格,輸入"student",按Enter鍵。
小技巧
若是在你的Visual Studio中沒有出現監視窗口或者不當心把它關閉了,怎麼辦?
在Visual Studio的菜單欄中經過選擇「調試」→「窗口」→「監視」→「監視1」選
項,能夠打開一個監視窗口,也能夠經過這種方式打開多個監視窗口。
本章總結
★1.使用Visual Studio建立和運行C#控制檯應用程序的步驟以下。
1.啓動Visual Studio 2010。
2.新建項目
3.生成可執行文件
4.開始運行
★2.C#採用命名空間組織程序,引入其餘命名空間用using關鍵字。
★3.C#中使用控制檯類Console的ReadLing()和WriteLine()方法輸入和輸出信息。
★4.C#中Main()方法的首字母大寫,根據返回值和參數的不一樣Main()方法有四種形式。
★5.C#中布爾類型使用bool關鍵字。
★6.C#中使用const關鍵字聲明常量。
★7.C#中有三種註釋類型,其中文檔註釋使用///表示。
★8.類是建立對象的模板,對象是類的一個具體實例。
★9.調試程序的步驟以下。
1.設置斷點:按F9快捷鍵。
2.啓動調度:按F5快捷鍵。
3.在監視窗口中查看變量的當前值。
第二章
C#語法快速熱身
1.掌握C#中的條件結構
2.掌握C#中的循環結構
3.掌握C#中的數組用法
4.掌握冒泡排序算法
★1.條件結構
1.if結構
2.switch結構
經驗
switch結構中case子句的擺放是沒有順序的,能夠把default子句放在最前面,
但要注意任何兩個case語句不能具備相同的值。
case中的值必須是常量表達式,不容許使用變量。
★2.數組與循環
1.一維數組
經驗
若是在程序中須要獲得數組的長度,應該使用「數組名.Length」語句得到,而不
是用數組定義的長度。這樣一旦數組長度發生變化,能夠及時得到數組當前的元素
個數。
2.循環結構
while do-while for foreach
經驗
1.while循環是先判斷條件表達式是否成立。若成立則執行循環體;不然結束循環。
2.do-while循環先執行一次循環體再判斷條件表達式是否成立。若成立則繼續循
環;不然結束循環。
3.for循環必須使用整型變量作循環計算器,經過條件表達式限定計數器變量值來控制循環。
4.foreach()自動遍歷給定集合的全部值。
5.break語句
除了在switch語句中可使用break語句退出某個case語句外,也能夠把它用於for、
while、do-while、foreach循環結構。break語句將使程序跳出當前循環結構,並繼續執行
該循環後面的語句。
6.continue語句
continue語句與break語句相似,它必須出如今for、while、do-while、foreach的循環結構
中。但continue語句的做用是退出當前循環結構的本次循環,並開始執行當前循環結構
的下一次循環,而不是退出當前循環結構。
★3.二重循環
★4.冒泡排序
▲1.冒泡排序算法
1.當i=0時,是第一輪比較,數組中全部的元素都參與比較。
2.當i=1時,由於scores[4]已是最大的數了,因此不參加比較。
3.當i=2時,scores[3]也不參與比較,只須要比較到scores[2],這輪一共比較2次。
4.當i=3時,scores[2]不參與比較,只須要比較scores[0]和scores[1],一共比較1次。
經驗
冒泡排序速記口決(升序):
1.N個數字來排隊,兩兩相比小靠前。
2.外層循環N-1,內層循環N-1-i。
3.若是要降序排序,只要把程序中的大於號換成小於號就好了。
本章總結
1.C#一維數組的聲明和初始化與Java略有不一樣,聲明時不能將數組名放在數據類型
和方括號之間。
2.C#中有四種循環結構:while、do-while、for、foreach、其中foreach用來遍歷集合
或者數組中的每一個元素。
3.二重循環就是在一個循環中嵌套另外一個循環,必須將內層循環完整地包含在外層循
環的循環體內。
4.break和continue語句用在內層循環時,只對內層循環的執行有影響,並不影響外層
循環。
5.使用二重循環能夠實現冒泡排序算法,排序的過程是比較相鄰的兩個數並交換,直
到全部的數都比較過並排好順序。
第三章
本章技能目標
1.掌握C#中的訪問修飾符
2.掌握C#中的屬性
3.掌握C#中的值傳遞和引用傳遞
★1.private訪問修飾符
1.生活中的訪問級別
2.訪問修飾符
訪問修飾符 訪問權限 訪問級別
public 不受任何限制 最高
private 只有類的內部可使用 最低
注意
若是在成員定義以前沒有指定訪問修飾符,那麼這個類成員的訪問權限默認爲
internal,它只能在本項目內訪問。
★2.this關鍵字
private string _name;
public void SetName(string _name)
{
//this就是當前對象的自己
this._name = _name;//前對象自己的名字等於方法傳進來的自己
}
this關鍵字能夠區分局部變量和成員變量。
★3.C#中屬性
1.用方法保證數據安全
2.用屬性實現字段封裝
class Student
{
private string _name = "灰太狼";
private int _age;
public string _cardID;
public int Age
{
get
{
return _age;
}
set
{
if(value<0||value>100)
{
_age = 19;
}
else
{
_age = value;
}
}
}
}
class Program
{
static void Main(string[] args)
{
Student student = new Student();
//執行Age屬性的set訪問器代碼
student.Age = -20;
//執行Age屬性的get訪問器代碼
Console.WriteLine("年齡是{0}",student.Age);
student.Age = 40;
Console.WriteLine("年齡是{0}",student.Age);
}
}
2.屬性的數據類型
定義類中的一個屬性時,屬性的數據類型必須與它所訪問的字段類型一致。
3.屬性的訪問類型
屬性除了能夠約束數據訪問外,還能夠設置讀,寫屬性來限定它的訪問類型。屬性的訪
問類型分爲如下三種。
1.只讀屬性,只包含get訪問器。
2.只寫屬性,只包含set訪問器。
3.讀寫屬性,包含get和set訪問器。
4.在編碼中如何快速地建立屬性
選中這個字段,右擊鼠標,在彈出的快捷菜單中,選擇「重構」→「封裝字段」命令,
選擇「封裝字段」選項後,Visual Studio 會彈出一個窗口。你能夠修改屬性的名稱,在
單擊「肯定」
小技巧
封裝字段的快捷鍵是Ctrl+R+E。
1:C#中,字段和屬性的區別是什麼?
答案:一般將字段指定爲private,在類內部使用。將屬性指定爲public,對外部公
開,經過get或set訪問器對字段提供安全,有效範圍的保護。
2:C#中,屬性和方法的區別是什麼?
答案:C#中的屬性set訪問器和get訪問器後不使用"()",由於訪問器沒有返回
值,因此也不須要指定void。
面向對象的特徵這————封裝
顧名思義,封裝表示將東西打包,使其以新的完整的形式出現。
封裝能夠爲咱們帶來以下這些好處。
第五章
指導學習:庫存管理
1.使用類和屬性封裝貨品信息
2.使用對象數組存儲貨品信息
3.使用輸入輸出語句獲取、顯示貨品信息
4.使用類型轉換獲取用戶輸入的貨品做息
5.使用條件結構實現菜單管理
6.使用循環結構實現菜單管理
7.使用自定義方法完成特定的功能
8.使用String類方法實現字符串處理
★1.C#基本語法
1.變量、方法
2.Console類
3.數組
★2.流控制
1.條件語句
2.循環
★3.類和對象
1.屬性、方法
2.值傳遞和引用傳遞
值傳遞把值複製到裏面,原來的值沒有改變。
引用傳遞是把地址複製到裏面,原來的值會改變。
★4.屬性
1.不會直接訪問類中的字段,經過get和set訪問器訪問
2.get返回相應的私有字段的值
3.set設定相應的私有字段的值
5
ERP--企業資源管理器
1.掌握數據庫的基本概念
2.掌握SSMS的基本操做
3.掌握如何建立和配置SQL Server數據庫
數據庫(Database,簡稱DB)技術是程序開發人員必須掌握的技術之一,在前面學習的
C#語言中,數據都是使用變量保存承內存中,一旦程序運行完畢,內存中的這些數據
信息也會隨之消失。
1.使用數據庫的必要性
使用數據庫能夠高效且條理分明地存儲數據,它令人們可以更加迅速和方便地管理數
據,主要體如今如下幾個方面。
1.能夠結構化存儲大量的數據信息,方便用戶進行有效的檢索和訪問。
2.能夠有效地保持數據信息的一致性、完整性、下降數據冗餘。
3.能夠知足應用的共享和安全方面的要求。
4.數據庫技術可以方便智能化地分析,產生新的有用信息。
第六章
程序數據集散地:數據庫
本章技能目標
1.掌握數據庫的基本概念
2.掌握SSMS的基本操做
3.掌握如何建立和配置SQL Server數據庫
數據庫(Database,簡稱 DB)技術是程序開發人員必須掌握的技術之一,在前面學習的
C#語言中,數據都是使用變量保存在內存中,一旦程序運行完畢,內存中的這些數據
信息也會隨之消失。
第七章
用表組織數據
★1.表相關的幾個基本概念
數據完整性
1.實體完整性約束
實體完整性要求表中的每一行數據都反映不一樣的實體,不能存在相同的數據行。
經過索引,惟一約束,主鍵約束或標識列屬性。
2.域完整性約束
域完整性指的是給定列輸入的有效性。
經過限制數據類型,檢查約束,輸入格式,外鍵約束,默認值,非空約束等多種方法,
能夠實現表的域完整性。
3.引用完整性約束
在輸入或刪除數據時,引用完整性約束用來保持表之間已定義的關係。
4.自定義完整性約束
用戶自定義完整性用來定義特定的規則。
★2.主鍵和外鍵
1.主鍵Primary Key
2.外鍵Foreign Key
★3.建立數據庫表
1.在SQL Server Management Studio 中創建數據庫表
2.肯定列的數據類型
Unicode是一種在計算機上使用的字符編碼,它爲每種語言中的每一個字符設定了統一
而且惟一的二進制編碼,以知足跨語言,跨平臺進行文本轉換,處理的要求。
3.保存數據庫表
★4.完善表的設計結構
1.是否容許爲空值
2.創建主鍵
3.默認值
4.標識列
★5.向表中插入數據
★6.創建表間關係
1.如何創建表間關係
2.創建數據庫關係圖
★7.創建檢查約束
1.如何創建檢查約束
★8.刪除數據庫表
第八章
用SQL語句操做數據
本章技能目標
1.使用T-SQL向表中插入數據
2.使用T-SQL更新表中數據
3.使用T-SQL刪除表中數據
★1.SQL簡介
1.SQL能作什麼
SQL是針對數據庫而言的一門語言,它能夠建立數據庫,數據表,能夠針對數據庫的數
據進行增、刪、改、查等操做,能夠建立視圖,存儲過程,能夠賦予用戶權限等。
2.SQL和T-SQL
SQL全稱是「結構化查詢語言(Stuctured Query Language)」
SQL語言不一樣於C#這樣的程序設計語言,它是隻能被數據庫識別的指令,可是在程序
中,能夠利用其餘編程語言組織SQL語句發送給數據庫,數據庫再執行相應的操做。
3.SQL的組成
DML(Data Manipulation Language,數據操做語言,也稱爲數據操縱語言):用來插
入,修改和刪除數據庫中的數據,如INSERT,U
第九章
數據查詢基礎
本章技能目標
1.理解查詢的機制
2.使用SELECT語句進行條件查詢
3.掌握查詢排序
4.使用表達式、運算符和函數實現查詢
★1.T-SQL查詢基礎
1.查詢機制簡介
查詢是針對表中已經存在的數據行而言的,能夠簡單地理解爲「篩選」,將必定條件的
數據抽取出來。
數據表在接受查詢請求的時候,能夠簡單地理解爲「它將逐行判斷」,判斷是否符合查
詢條件。若是符合查詢條件就提取出來,而後把全部被選中的行組織在一塊兒,造成另外
一個相似於表的結構,構成查詢的結果,一般叫作記錄集(RecordSet)。
因爲記錄集的結構實際上和表的結構相似,都是由行組成的,所以在記錄集上依然能夠
進行再次查詢。
★2.使用SELECT語句進行查詢
查詢使用SELECT語句,最簡單的查詢語句的格式能夠表示爲:
★語法
SELECT<列名>
FROM<表名>
[WHERE <查詢條件表達式>]
[ORDER BY <排序的列名>[ASC或DESC]]
其中,WHERE的條件是可選的,若是不限制,則查詢返回全部行的數據項。ORDER BY 是
用來排序的,後續內容將會詳細介紹。
經驗
查詢語句能夠分爲多個子句部分,例如,上面的查詢語法能夠劃分爲SELECT……
FROM……WHERE……ORDER BY……四個子句,對於複雜多行的SQL語句,能夠將每一個
子句單獨寫成一行,以方便調試和查找錯誤。
1.查詢全部的數據行和列
把表中的全部行和列都列舉出來比較簡間,這時候可使用「*」表示全部的列:
SELECT * FROM Students
2.查詢部分行或列
查詢部分列須要列舉不一樣的列名,而查詢部分行須要使用WHERE子句進行條件限制,
查詢地址爲「河南新鄉」的學生,而且只顯示編號,姓名和地址列。
SELECT Scode,SName,SAddress
FROM Students
WHERE SAddress = '河南新鄉'
3.在查詢中使用列的別名
AS子句能夠用來改變結果集列的名稱,也能夠爲組合或者計算出的列指定名稱。
SELECT Scode AS 學生編號,SName AS 學生姓名,SAddress AS 學生地址
FROM Students
WHERE SAddress <> '河南新鄉'
假設在某數據庫的僱員表Employees存在FirstName列和LastName列,如今須要將這兩列
合併成一個叫作「姓名」的列,可使用如下查詢語句:
SELECT FirstName+'.'+LastName AS 姓名
FROM Employees
從新命名列名還有一種方法,就是採用「=」來命名,例如:
SELECT 姓名 = FirstName+'.'+LastName
FROM Employees
4.查詢空值
第十章
模糊查詢和聚合函數
本章技能目標
1.使用LIKE、BETWEEN、IN進行模糊查詢
2.使用聚合函數統計和彙總查詢信息
★1.模糊查詢
模糊查詢提取的數據不必定是確切的,查詢者對查詢條件也是模糊的,大概的,不特別
明確的。
前面章節學習過的IS NULL查詢嚴格說也是一種模糊查詢。
★2.通配符
簡單地講,通配符是一類字符,它能夠代替一個或多個真正的字符,查找信息時做爲替
代字符出現。T-SQL中的通配符必須與LIKE關鍵字一塊兒使用,以完成特殊的約束或要求。
通配符 解釋
_ 一個字符
A LIKE 'C_'
CS、Cd等
% 任意長度的字符串
B LIKE 'CO_%'
CONST、COKE等
[ ] 括號中所指定範圍內的一個字符
C LIKE '9W0[1-2]'
9W01或9W02
[^] 不在括號中所指定範圍內的一個字符
D LIKE '%[A-D][^1-2]'
9W03或9W07等
★3.使用LIKE進行模糊查詢
LIKE運算符用於匹配字符串或字符串的一部份(稱爲子串)。因爲該運算符只用於字符
串,因此僅與字符數據類型(char或varchar等)聯合使用。
查找姓張的學生信息
SELECT * FROM Students WHERE SName LIKE '張%'
或者查詢住址包含「北京」字樣的學生信息
SELECT * FROM Students WHERE SAddress LIKE '%北京%'
★4.使用BETWEEN在某個範圍內進行查詢
使用關鍵字 BETWEEN 能夠查找那些介於兩個已知值之間的一組未知值。要實現這種查
找,必須知道查找的初值和終值,而且初值小於等於終值,初值和終值用單詞 AND 分
開,例如:
查詢分數在60(含)到80(含)之間的信息以下:
SELECT * FROM SCore WHERE Score BETWEEN 60 AND 80
若是寫成以下形式;
SELECT * FROM Score WHERE Score BETWEEN 80 AND 60
則不會報語法錯,但也不會查詢到任何信息。
查詢不在2010年1月1號2010年8月1號之間訂購的圖書列表
SELECT * FROM Sales WHERE ord_date NOT BETWEEN '2010-1-1' AND '2010-8-1'
★5.使用IN在列舉值內進行查詢
查詢的值是指定的某些值之一,可使用帶列舉值的IN關鍵字來進行查詢。將列舉值
放在小括號裏,用逗號分開,例如:
查詢北京,廣州或者上海的學生姓名:
SELECT SName AS 學生姓名
FROM Students
WHERE SAddress IN ('北京','廣州','上海')
ORDER BY SAddress
一樣能夠把 IN 關鍵字和 NOT 關鍵字合起來使用,這樣能夠獲得全部不匹配列舉值
的行。
★6.T-SQL中的聚合函數
聚合函數可以基於列進行計算,將多個值合併爲一個值,其做用是對一組值進行計算
,並返回計算後的值。
1.SUM()
SUM()返回表達式中全部數值的總和。
SUM()只能用於數字類型的列,不可以彙總字符,日期等其餘數據類型。
查詢學生編號爲23的學生總分。
SELECT SUM(Score) AS 學號爲23的學生總分
FROM Score
WHERE StudentID=23
注意這種查詢只返回一個數值,所以,不可以直接與可能返回多行的列一塊兒使用來進行
查詢
SELECT SUM(Score) AS 學號爲23的學生總分,CourseID AS 科目編號
FROM Score
WHERE StudentID=23
2.AVG()
AVG()函數返回表達式中全部數值的平均值。
AVG()函數也只能用於數字類型的列。
查詢及格線以上學生的平均成績。
SELECT AVG(Score) AS 平均成績
FROM Score
WHERE Score>=60
3.MAX()和MIN()
MAX()返回表達式中的最大值,MIN()返回表達式中的最小值,
它們均可以用於數字型、字符型以及日期/時間類型的列。
查詢平均成績,最高分,最低分。
SELECT AVG(Score) AS 平均成績,MAX(Score) AS 平均成績,MIN(Score) AS 最低分
FROM Score
WHERE Score >=60
4.COUNT()
COUNT()返回提供的組或記錄集中的計數。COUNT()能夠用於數字和字符類型的列。另
外,也可使用星號(*)做爲COUNT的表達式,使用星號能夠沒必要指定特定的列而計算
全部的行數。
查詢及格人數的語句
SELECT COUNT(*) AS 及格人數
FROM Score
WHERE Score>=60
本章總結
1.通配符是一類字符,它能夠代替一個或多個真正的字符,查找信息時做爲替代字符
出現。
2.「_」和「%」分別匹配一個字符和多個字符。
3.使用LIKE、BETWEEN、IN關鍵字,可以進行模糊查詢。
4.聚合函數可以對列進行計算,對於分析和統計很是有用。
5.經常使用的聚合函數如SUM()、AVG()、MAX()、MIN()、COUNT()。
第十一章
聯接查詢和分組查詢
本章技能目標
1.使用GROUP BY 進行分組查詢
2.掌握多表聯接查詢
★1.分組查詢
1.使用GROUP BY進行分組查詢
採用分組查詢實現的T-SQL語句以下:
SELECT CourseID,AVG(Score) AS 課程平均成績
FROM Score
GROUP BY CourseID
1.查詢男女學生的人數各是多少
SELECT COUNT(*) AS 人數,SSex FROM Students
GROUP BY SSex
2.查詢每一個年級的總人數
SELECT COUNT(*) AS 年級人數,SGrade FROM Students
GROUP BY SGrade
3.查詢每一個科目的平均分,而且按照由低到高的順序排列顯示
對比
思路同前面的同樣,按照科目進行分組。
分數由高到低進行排序,須要用到ORDER BY子句,問題是這個ORDER BY子句
放在哪一個位置?GROUP BY 子句以前仍是以後?如今來仔細想一下,進行排序時,
應該是對分完組後的平均分進行一個排序,這樣想來應該放在GROUP BY子句之
完整的T-SQL語句以下。
SELECT CourseID,AVG(Score) AS 課程平均成績 FROM Score
GROUP BY CourseID
ORDER BY AVG(Score) DESC
★2.多列分組查詢
分組查詢有時候可能還要按照多個列來進行分組。例如,學生信息表Students中記錄了
每一個學生的信息,包括所屬年級和性別等。
若是要統計每一個學期的男女學生人數,則理論上先把每一個學期分開,而後針對每一個學
期,把男女學生人數各自統計,也就是須要按照兩個列進行分組,所屬年級和性別。
SELECT COUNT(*) AS 人數,SGrade AS 年級,SSex AS 性別 FROM Students
GROUP BY SGrade,SSex
ORDER BY SGrade
不難理解,使用GROUP BY 關鍵字時,在SELECT列表中能夠指定的列是有限制的,僅
容許如下幾項。
1.被分組的列。
2.爲每一個分組返回一個值的表達式,例如聚合函數計算出的列。
★3.使用HAVING子句進行分組篩選
1.查詢年級總人數超過15的年級
首先能夠經過分組查詢獲取每一個年級的總人數。
SELECT COUNT(*) AS 人數,SGrade AS 年級 FROM Students
GROUP BY SGrade
可是還有一個條件:人數超過15的年級。這個時候,牽扯到分組統計後的條件限制。
限制條件爲COUNT(*)>15。這時候使用WHERE子句是不能知足查詢要求的,由於
WHERE子句只能對沒有分組統計前的數據行進行篩選。對分組後的條件的篩選必須使用
HAVING子句,簡單地說,HAVING子句用來對分組後的數據進行篩選,將「組」看作
「列」來限定條件。
SELECT COUNT(*) AS 人數,SGrade AS 年級 FROM Students
GROUP BY SGrade
HAVING COUNT(*)>15
2.查詢平均分及格的課程信息。
在查詢每一個科目平均分的基礎上,增長了一個條件:平均分及格的科目。這樣按照科目
進行分組後,使用AVG(Score)>=60控制及格件便可。
SELECT CourseID AS 課程編號,AVG(Score) AS 課程平均成績
FROM Score
GROUP BY CourseID
HAVING AVG(Score)>=60
HAVING和WHERE子句能夠在同一個SELECT語句中一塊兒使用,使用順序應以下。
WHERE→GROUP BY→HAVING
在SELECT語句中,WHERE,GROUP BY,HAVING子句和聚合函數的執行次序
以下:WHERE子句從數據源中去掉不符合其搜索條件的數據:GROUP BY 子句搜
集數據行到各個組中,統計函數爲各個組計算統計值:HAVING子句去掉符合其
組搜索條件的各組數據行。
3.查詢每門課程及格總人數和及格學生的平均分
分析
經過需求瞭解到所查詢的信息,都是要求及格的統計,這樣就首先從數據源中將不
及格的進行濾除,而後對符合及格要求的數據再進行分組處理。
SELECT COUNT(*) AS 人數,AVG(Score) AS 平均分,CourseID AS 課程 FROM Score
WHERE Score>=60
GROUP BY CourseID
4.查詢每門課程及格總人數和及格平均分在80分以上的記錄
分析
同上一個查詢需求思路一致,只是加了一個對分組後數據的條件:及格平均分在80
分以上,增長HAVING子句便可
SELECT COUNT(*) AS 人數,AVG(Score) AS 平均分,CourseID AS 課程 FROM Score
WHERE Score>=60
GROUP BY CourseID
HAVING AVG(Score)>=80
5.在按照部門分類的員工表中,查詢「有多個員工的工資不低於2000的部門編號」
分析
利用WHERE子句首先濾除工資低於2000的記錄,而後再按照部門進行分組,最後
對分組後的記錄進行條件限定。
SELECT 部門編號,COUNT(*) FROM 員工信息表
WHERE 工資 >= 2000
GROUP BY 部門編號
HAVING COUNT(*) > 1
★4.多表聯接查詢
▲1.多表聯接查詢的分類
多表聯接查詢其實是經過各個表之間共同列的關聯性來查詢數據的,它是關係數據庫
查詢最主要的特徵。
如下是幾種經常使用的聯接:內聯接,外聯接。
1.內聯接
內聯接是最典型,最經常使用的聯接查詢,它根據表中共同的列來進行匹配。特別是兩個表
存在主外鍵關係時一般會使用到內聯接查詢。
2.外聯接
外聯接是至少返回一個表中的全部記錄,根據匹配條件有選擇性地返回另外一張表的記錄。
外聯接能夠是左外聯接,右外聯接。
★5.內聯接查詢
內聯接查詢一般會使用像「=」或「<>」等比較運算符來判斷兩列數據值是否相等。
上面所說的根據學生學號來判斷出學生姓名的聯接就是一種內聯接。
內聯接使用INNER JOIN…ON關鍵字或WHERE子句來進行表之間的關聯。內聯接查詢可
以經過兩種方式實現。
1.在WHERE子句中指定聯接條件
例如查詢學生姓名和成績
SELECT Students.SName,Score.CourseID,Score.Score
FROM Students,Score
WHERE Students.SCode = Score.StudentID
2.在FROM 子句中使用INNER JOIN…ON
SELECT S.SName,C.CourseID,C.Score
FROM Students AS S
INNER JOIN Score AS C ON (S.SCode = C.StudentID)
在上面的內聯接查詢中:
INNER JOIN 用來聯接兩個表。
INNER 能夠省略。
ON 用來設置條件。
AS 指定表的「別名」。若是查詢的列名在用到的兩個或多個表中不重複,則對這
一列的引用沒必要用表名來限定。
查詢科目編號爲1的及格學生的姓名和分數。WHERE子句用來限定查詢條件。
SELECT S.SName,C.CourseID,C.Score
FROM Students AS S
INNER JOIN Score AS C ON (S.SCode=C.StudentID)
WHERE C.Score>=60 AND C.CourseID=1
內聯接查詢一般不只僅聯接兩個表,有時候還會牽涉到三個表或者更多表。
例如,除了學生信息表,學生成績表以外,還存在課程名稱表。上面的查詢不只僅
要顯示學生姓名,分數,並且要經過課程編號來顯示課程名稱表中對應課程的名稱。
可使用如下三表聯接查詢。
SELECT S.SName AS 學生姓名,CS.CourseName AS 課程名稱,C.Score AS 考試成績
FROM Students AS S
INNER JOIN Score AS C ON (S.SCode=C.StudentID)
INNER JOIN Course AS CS ON (CS.CourseID=C.CourseID)
★6.外聯接查詢
內聯接的結果是從兩個或兩個以上表的組合中挑選出符合聯接條件的數據,
若是數據沒法知足聯接條件則將其丟棄。在內部聯接中,參與聯接表的地位是平等的。
與內部聯接相對的方式稱爲外部聯接。在外部聯接中參與聯接的表有主從之分,以主表
的每行數據匹配從表的數據列,將符合聯接條件的數據直接返回到結果集中,對那些不
符合聯接條件的列,將被填上NULL值(空值)後再返回到結果集中。
1.左外聯接查詢
左外聯接的結果集包括LEFT JOIN子句中指定的左表的全部行,而不只僅是聯接列所匹
配的行。若是左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的全部選
擇列均爲空值。
左外聯接使用LEFT JOIN…ON或LEFT OUTER JOIN…ON關鍵字來進行表之間的關聯。
SELECT S.SName,C.CourseID,C.Score
FROM Students AS S
LEFT OUTER JOIN Score AS C ON S.SCode = C.StudentID
有部分學生可能沒有參加過任何科目的考試,因此成績表中沒有相關的考試記錄,對應
的科目編號和成績以NULL(空值)填充。
SELECT CS.CourseName,C.StudentID,C.Score
FROM Course AS CS
LEFT OUTER JOIN Score AS C ON CS.CourseID=C.CourseID
2.右外聯接查詢
右外聯接查詢與左外聯接查詢相似,只不過要包含右表中全部匹配的行。若是右表中有
的項在左表中沒有對應的項,則以NULL值填充。
右外聯接使用RIGHT JOIN…ON 或RIGHT OUTER JOIN…ON關鍵字來進行表之間的關聯。
本章總結
1.分組查詢是針對表中不一樣的組分類統計和輸出的,GROUP BY 子句一般會結合聚合
函數一塊兒來使用。
2.HAVING子句可以在分組的基礎上,再次進行篩選。
3.多個表之間一般使用聯接查詢。
4.最多見的聯接查詢是內聯接(INNER JOIN…ON),一般會在相關表之間提取引用
列的數據項。
第十三章
項目案例:QQ數據庫管理
本章技能目標
1.掌握建立數據庫併爲數據表添加約束
2.掌握建立數據表之間的關係
3.使用T-SQL語句對數據進行綜合管理
4.使用管理器進行數據庫的管理
▲1.用例1:建立QQ數據庫及登陸名
使用管理器建立QQ數據庫,併爲其建立登陸名QQMaster,要求以下。
1.數據文件初始大小爲10MB,文件按15%自動增加,最大文件大小不受限制。
2.日誌文件初始大小爲5MB,文件按1MB自動增加,最大文件大小爲50MB。
QQMaster權限等同管理員權限,自動建立關聯數據庫用戶QQMaster。
★提示
注意保存到本地磁盤的位置
▲2.用例2:建立表結構
在管理器中根據以上分析的QQ數據庫的表結構建立用戶表QQUser,用戶基本信息表
BaseInfo和用戶關係表Relation
★提示
根據實際狀況,注意設置主鍵,數據類型長度,不容許爲空的列等基本表結構要求。
▲3.用例3:添加約束
根據問題分析,概括總結三個表全部的約束條件以下。
1.QQ密碼不得少於6位。
2.在線狀態的值必須爲0,1,2, 0表示在線,1表示離線,2表示隱身。
3.用戶等級默認值爲0。
4.性別容許爲空值,但若是輸入值就必須爲0或1,0表示男,1表示婦。
5.年齡必須是在1~100之間的整數。
6.用戶關係只能是數字0,1, 0表示好友,1表示黑名單人物。
▲4.用例4:創建關係
1.用戶表和基本信息表是--對應的關係,一個QQ號碼對應着一個用戶記錄和一個
基本信息記錄。
2.關係表中存在的QQ必然是在用戶表中存在的用戶QQ,而且一個QQ能夠有多個
好友,多個黑名單人物,也能夠是別人的好友,黑名單人物。
--▲5.用例5:插入數據
--請根據表提供的信息要求,在查詢窗口中使用T-SQL語句把表中的數據
--插入到對應的數據表中。
INSERT INTO QQUser (
[QQID]
,[PassWord]
,[LastLogTime]
,[Online]
,[Level])
SELECT '54789625','add512#&','2008-02-16 17:01:35',2,1 UNION
SELECT '88662753','admin0219','2008-02-19 21:08:50',0,5 UNION
SELECT '8855678','guest0221','2008-02-21 16:28:20',1,6
INSERT INTO BaseInfo ([QQID]
,[NickName]
,[Sex]
,[Age]
,[Province]
,[City]
,[Address]
,[Phone])
SELECT '54789625','蝴蝶飛飛',1,16,'北京','朝陽區','亞運村','37547388157668' UNION
SELECT '88662753','秋芙蓉',0,20,'河南省','南陽','方城博望','88715783657725' UNION
SELECT '8855678','雙眼皮の瀦',1,38,'北京','海淀區','雙榆樹東里','65794968876143'
INSERT INTO Relation ([QQID]
,[RelationQQID]
,[RelationStatus])
SELECT '54789625','88662753',0 UNION
SELECT '88662753','8855678',1 UNION
SELECT '8855678','8855678',0
SELECT * FROM QQUser
SELECT * FROM BaseInfo
SELECT * FROM Relation
--利用導入/導出嚮導將提供的文本文件中用戶信息,用戶基本信息,用戶關係信息的數
--據導入到相對應的數據表中。
--★提示
--導入用戶關係數據時,必定要注意三個QQ用戶已經使用T-SQL語句插入成功,因
--爲其中的數據用到了這三個用戶。
--▲6.用例6:查詢數據
--編寫T-SQL語句按如下要求查詢數據。
--1.查詢QQ號碼爲88662753的用戶的全部好友信息,包括QQ號碼(QQID),暱稱
--(NickName),年齡(Age)。
--★提示
--利用內聯接實現。
SELECT R.RelationQQID AS 好友QQ號碼,B.NickName AS 暱稱,B.Age AS 年齡
FROM BaseInfo AS B
INNER JOIN Relation AS R ON (B.QQID=R.RelationQQID)
WHERE R.QQID='88662753' AND R.RelationStatus=0
--2.查詢當前在線用戶的信息。
SELECT *
FROM BaseInfo AS B
INNER JOIN QQUser AS Q ON (Q.QQID=B.QQID)
WHERE Q.Online=0
--3.查詢北京的,年齡在18至45歲之間的在線用戶的信息。
SELECT *
FROM BaseInfo AS B
INNER JOIN QQUser AS Q ON (Q.QQID=B.QQID)
WHERE Q.Online=0 AND B.Province ='北京市' AND Age>=18 AND Age<=45
--4.查詢暱稱爲「小笨豬」的用戶信息。
SELECT *
FROM BaseInfo AS B
WHERE B.NickName='小笨豬'
--5.查詢QQ號碼爲54789625的用戶的好友中每一個省份的總人數,而且按總人數由大
--到小排序。
--★提示
--利用SELECT…FROM…WHERE…GROUP BY…ORDER BY…實現,其
--中內聯接條件WHERE的T-SQL語句可參考以下。
--WHERE(Relation.QQID=54789625 AND Relation.RelationStatus=0 AND
--Relation.RelationQQID=BaseInfo.QQID)
SELECT B.Province AS 省份,COUNT(*) AS 好友總人數
FROM BaseInfo AS B,Relation AS R
WHERE(R.QQID='54789625' AND R.RelationStatus=0 AND
R.RelationQQID=B.QQID)
GROUP BY B.Province
ORDER BY COUNT(*) DESC
--6.查詢至少有150天未登陸QQ帳號的用戶信息,包括QQ號碼,最後一次登陸時
--間,等級,暱稱,年齡,並按時間的降序排列。
--★提示
--利用日期函數DATEDIFF()計算出超過150未登陸過的QQ號碼,再利用聯接查詢獲
--取相應的信息。
SELECT B.QQID AS QQ號碼,LastLogTime AS 最後一次登陸時間,Level AS 等級
,NickName AS 暱稱,Age AS 年齡
FROM BaseInfo AS B
INNER JOIN QQUser AS Q ON (Q.QQID=B.QQID)
WHERE DATEDIFF(DD,Q.LastLogTime,GETDATE())>=150
--7.查詢QQ號碼爲54789625的好友中等級爲10級以上的「月亮」級用戶信息。
--★提示
--利用三表聯接查詢。
SELECT B.QQID AS 好友QQ號碼,B.NickName AS 暱稱,B.Age AS 年齡,Q.Level AS 等級
FROM BaseInfo AS B
INNER JOIN Relation AS R ON (B.QQID=R.RelationQQID)
INNER JOIN QQUser AS Q ON (Q.QQID=B.QQID)
WHERE R.QQID='54789625' AND Q.Level>=10 AND R.RelationStatus=0
ORDER BY B.QQID
--8.查詢QQ號碼爲54789625的好友中隱身的用戶信息。
SELECT B.QQID AS 好友QQ號碼,B.NickName AS 暱稱,B.Age AS 年齡
FROM BaseInfo AS B
INNER JOIN Relation AS R ON (B.QQID=R.RelationQQID)
INNER JOIN QQUser AS Q ON (Q.QQID=B.QQID)
WHERE R.QQID='54789625' AND Q.Online=2 AND R.RelationStatus=0
--9.查詢好友超過20個的用戶QQ號碼及其好友總數。
--★提示
--利用分組查詢,而且增長分組條件HAVING COUNT(*)>=20。
SELECT R.QQID AS 超過20個的用戶QQ號碼,COUNT(*) AS 好友總數
FROM Relation AS R
WHERE R.RelationStatus=0
GROUP BY R.QQID
HAVING COUNT(*)>=20
--10.爲了查看信譽度,管理員須要查詢被當作黑名單人物次數排名前20的用戶。
--★提示
--利用分組查詢,注意需求,按照關係用戶QQ號碼RelationQQID進行分組。
SELECT TOP 20 (R.RelationQQID) AS 黑名單人物次數排名前20的用戶,COUNT(*) AS 黑名單次數
FROM Relation AS R
WHERE R.RelationStatus=1
GROUP BY R.RelationQQID
ORDER BY COUNT(*) DESC
--▲用例7:修改數據
--編寫T-SQL語句使其按如下要求修改數據。
--1.假設個人QQ號碼爲8855678,今天我隱身登陸。
UPDATE QQUser
SET Online=2
WHERE QQID='8855678'
--2.假設個人QQ號碼爲8855678,修改個人暱稱爲「被淹死的魚」,地址爲「解放中
--路6號院106室」。
UPDATE BaseInfo
SET NickName='被淹死的魚',Address='解放中路6號院106室'
WHERE QQID='8855678'
--3.假設個人QQ號碼爲8855678,將個人好友「248624066」拖進黑名單。
UPDATE Relation
SET RelationStatus=1
WHERE QQID='8855678' AND RelationQQID='248624066'
--4.爲了提升QQ用戶的聊天積極性,把等級小於6級的用戶等級都升升1個級別。
UPDATE QQUser
SET Level=Level+1
WHERE Level<6
--5.管理員將超過365天沒有登陸過的QQ鎖定(即將等級值設定爲-1)。
UPDATE QQUser
SET Level=-1
WHERE DATEDIFF(DD,LastLogTime,GETDATE())>365
--6.爲了獎勵用戶,將好友數量超過20的用戶等級提高1個級別。
--★提示
--首先,獲取好友超過20個的用戶QQ號碼結果集,參考用例7的須要9。
--其次,利用IN關鍵字模糊匹配結果集中的QQID進行更新。
--UPDATE QQUser SET…WHERE QQID IN (SELECT QQID FROM Relation…)
UPDATE QQUser
SET Level=Level+1
WHERE QQID IN (
SELECT QQID
FROM Relation AS R
WHERE R.RelationStatus=0
GROUP BY R.QQID
HAVING COUNT(*)>=20)
--7.把QQ號碼爲286314的用戶的好友「嘟嘟魚」拖進黑名單中。
--★提示
--完成思路參考需求6,使用IN關鍵字進行模糊匹配。
UPDATE Relation
SET RelationStatus=1
WHERE QQID='286314' AND RelationQQID IN (
SELECT B.QQID
FROM BaseInfo AS B,Relation AS R
WHERE R.RelationStatus=0 AND B.NickName='嘟嘟魚')
--▲用例8:刪除數據
--1.把QQ號碼爲54789625的用戶的黑名單中的用戶刪除。
DELETE FROM Relation WHERE QQID='54789625' AND RelationStatus=1
--2.QQ號碼爲622009019用戶屢次在QQ中發佈違法信息,形成了很壞的影響,所以
--管理員決定將其刪除。
--★提示
--此需求須要從三張表中刪除相關信息,注意從各表刪除的前後次序。
DELETE FROM Relation WHERE QQID='622009019' OR RelationQQID='622009019'
DELETE FROM BaseInfo WHERE QQID='622009019'
DELETE FROM QQUser WHERE QQID='622009019'
--3.管理員將超過1000天沒有登陸過的QQ刪除。
--★提示
--實現此需求,須要分四步走。
--第一步:查詢超過1000天沒有登陸過的QQID集。
SELECT QQID FROM QQUser WHERE DATEDIFF(DD,LastLogTime,GETDATE())>=1000
--第二步;刪除Relation表中的數據,利用IN關鍵字模糊匹配QQID集。參孝以下的
--T-SQL語句。
--DELETE FROM Relation
--WHERE QQID IN(…) OR RelationQQID IN(…)
DELETE FROM Relation
WHERE QQID IN(SELECT QQID FROM QQUser WHERE DATEDIFF(DD,LastLogTime,GETDATE())>=1000)
OR RelationQQID IN(SELECT QQID FROM QQUser WHERE DATEDIFF(DD,LastLogTime,GETDATE())>=1000)
--第三步:刪除BaseInfo表中的數據,同理利用IN關鍵字模糊匹配QQID集。
DELETE FROM BaseInfo
WHERE QQID IN(SELECT QQID FROM QQUser WHERE DATEDIFF(DD,LastLogTime,GETDATE())>=1000)
--第四步;刪除QQUser 表中的數據。
DELETE FROM QQUser
WHERE QQID IN(SELECT QQID FROM QQUser WHERE DATEDIFF(DD,LastLogTime,GETDATE())>=1000)
--▲用例9:分離數據庫
第十四章
使用ADO.NET 訪問數據庫
本章技能目標
1.瞭解ADO.NET的功能和組成
2.會使用Connection對象鏈接數據庫
3.會使用Command對象查詢單個值
4.會捕獲和處理程序中的異常
★1.ADO.NET概述
在信息系統中,經常使用的數據庫有不少種,好比有SQL Server、Access、Oracle等。爲了
使客戶端可以訪問數據庫服務器上的數據,就須要用到數據庫訪問的方法和技術,
ADO.NET(ActiveX Data Objects)就是這種技術之一。
1.ADO.NET簡介
ADO.NET是,NET Framework中不可缺乏的一部分,它是一組類。經過這些類,NET應
用程序就能夠訪問數據庫了。ADO.NET的功能很是強大,它提供了對關係數據庫。XML
以及其餘數據存儲的訪問。應用程序能夠經過ADO.NET技術與這些數據源進行鏈接。
對數據進行增、刪、改、查等操做。
ADO.NET技術的一個很是大的優勢是,它與數據源斷開鏈接時也可使用數據。
ADO.NET能夠把從數據源檢索到的數據保存在本地一個叫作「數據集」的地
方,這樣應用程序就能夠直接操做本地的數據,而數據源能夠爲更多的應用程序提供服
務。這就是ADO.NET的斷開鏈接模型。
★2.ADO.NET的主要組件
ADO.NET提供了兩個組件,用來訪問和處理數據:NET Framework數據提供程序和
DataSet(數據集)
.NET Framework數據提供程序是專門爲數據處理以及快速地只進、只讀訪問數據而
設計的組件。使用它能夠鏈接數據源、執行命令和檢索結果,直接對數據源進行操
做。
DataSet是專門爲獨立於任何數據源的數據訪問而設計的。使用它,能夠沒必要直接
和數據源打交道,能夠大批量地操做數據,也能夠將數據綁定在控件上。
ADO.NET 的主要組件
.NET Framework 數據提供程序--用於鏈接到數據庫、執行命令和檢索結果
DataSet(數據集)--獨立於數據源的數據訪問
.NET 數據提供程序類型
.NET Framework 數據提供程序
SQL Server .NET 數據提供程序
說 明
Microsoft SQL Server 數據源
System.Data.SqlClient 命名空間
OLE DB .NET 數據提供程序
說 明
OLE DB 公開的數據源
System.Data.OleDb 命名空間
ODBC .NET 數據提供程序
說 明
ODBC 公開的數據源
System.Data.Odbc 命名空間
Oracle .NET 數據提供程序
說 明
Oracle 數據源
System.Data.OracleClient 命名空間
★3..NET Framework數據提供程序的四個核心對象
1.Connection--創建與特定數據源的鏈接
2.Command--對數據源執行命令
3.DataReader--從數據源中讀取只進且只讀的數據流
4.DataAdapter--用數據源填充DataSet並解析更新
★4.使用Connection對象
當應用程序要訪問數據的時候,怎樣可以找到數據庫呢?這就須要Connection對象。它
就像是車間到倉庫的一條路,有了Connection對象,應用程序就可以與數據庫創建連
接,完成數據訪問操做。
★5.認識Connection對象
不一樣命名空間的 Connection 對象
命名空間對應的 Connection 對象
System.Data.SqlClient
SqlConnection
System.Data.OleDb
OleDbConnection
System.Data.Odbc
OdbcConnection
System.Data.OracleClient
OracleConnection
Connection 主要成員
屬性名稱
ConnectionString
說 明
鏈接字符串
方法 說 明
Open() 打開數據庫鏈接
Close() 關閉數據庫鏈接
鏈接數據庫步驟
一、定義鏈接字符串
★語法
Data Source=服務器名;Initial Catalog=數據庫名; User ID=用戶名;Pwd=密碼
二、建立 Connection 對象
★語法
SqlConnection connection = new SqlConnection(connString);
三、打開與數據庫的鏈接
★語法
connection.Open( );
使用Visual Studio 的服務資源管理器得到鏈接字符串。方法以下。
1.在Visual Studio 中,選擇菜單中的「視圖」→「服務器資源管理器」命令,或按快
捷鍵Ctrl+Alt+S。
2.在打開的服務器資源管理器中,用鼠標右鍵單擊「數據鏈接」,選擇「添加鏈接」
命令,
3.在彈出的「添加鏈接」對話框中,選擇數據源,輸入服務器名,選擇身份驗證,選
擇要鏈接的數據庫,肯定後,就在服務器資源管理器中添加了一個數據鏈接。
4.選中新添加的鏈接,在「屬性」窗口中就可以找到鏈接字符串了,能夠將它選中復
制到代碼中。
★注意
打開數據庫鏈接,執行命令後,要確保關閉數據庫鏈接。
★6.鏈接數據庫示例
string strConn = "Data Source=R0OM9WXPH5ENXXY;Initial Catalog=MySchoolBase;User ID=sa;Password=123";
★7.常見錯誤
1.數據庫鏈接字符串中各參數之間的分隔符錯誤
string strConn = "Data Source=R0OM9WXPH5ENXXY,Initial Catalog=MySchoolBase,User ID=sa,Password=123";
2.數據庫鏈接字符串中參數名稱拼寫錯誤
string strConn = "DataSource=R0OM9WXPH5ENXXY;Initial Catalog=MySchoolBase;User ID=sa;Password=123";
3.數據庫鏈接字符串中引號出現的位置不正確
string strConn = "Data Source=R0OM9WXPH5ENXXY;Initial Catalog=MySchoolBase;User ID="sa";Password="123";
在拼寫數據庫鏈接字符串時注意引號出現的位置。若是在數據庫鏈接字符串中須要用
到單、雙引號時,可使用"+"符號實現字符串的鏈接。
★8.異常處理
程序員編寫應用程序不免會發生錯誤。有的錯誤是在編譯時產生的,這就是編譯錯誤。
有的錯誤是在程序運行的過程當中出現的,這種錯誤就是異常。有些異常可能沒法避免但
是能夠預知,好比咱們的程序正要讀取數據庫,網絡忽然斷了,程序沒法控制網絡是否
暢通,但能夠預測到可能會有這種狀況出現。爲了保證應用程序正常運行,程序員要對
程序運行中可能發生的錯誤進行編碼處理,這就是異常處理。
★9.如何處理異常
.NET提供了try-catch語句塊來捕獲和處理異常。
★語法
try
{
//包含可能出現異常的代碼
}
catch(處理的異常類型)
{
//處理異常的代碼
}
try-catch語句是把可能出現異常的代碼放在try塊中。若是在程序運行過程當中發生了異
常,就會跳轉到catch塊中進行錯誤處理,這個過程叫作捕獲了異常。若是程序執行沒
有發生異常,那麼將會正常執行try塊中的所有語句,但不會執行catch塊中的語句。
異常也有不少種類型,本課程咱們只需關注Exception類。這是.NET提供的一個異常類,
表示應用程序在運行時出現的錯誤。
try
{
conn.Open();
//……省略其餘操做
conn.Close();
}
catch(Exception ex)
{
//處理異常的代碼
}
前面強調過。數據庫鏈接必須顯式關閉。可是,若是在數據庫鏈接關閉以前就出現了異
常,程序就會跳轉到catch塊當中,那麼try塊當中的數據庫鏈接關閉方法就不會執行。
這時應該怎麼辦呢?這個問題.NET早就想到了,它提供了一個finally塊,不管是否發
生異常,出如今finally塊中的語句都會執行。這樣就能夠把關閉數據庫鏈接的語句寫在
finally塊中。
try
{
conn.Open();
//……省略其餘操做
}
catch(Exception ex)
{
//處理異常的代碼
}
finally
{
conn.Close();
}
這樣就確保了不管程序是否發生異常,在程序結束運行以前都會關閉數據庫鏈接。
★注意
程序在執行了try塊或catch塊以後總會將控制權傳遞給finally塊,與try塊的退出方
式無關。
★10.處理數據庫操做異常示例
★技巧
使用Visual Studio的「外側代碼」功能來添加try塊。方法很簡單,在Visual Studio
的代碼編輯器中,選中可能會出現異常的代碼,單擊鼠標右鍵,選擇「外側代碼」
在出現的外側代碼選擇器中找到try。
★11.使用Command對象
咱們已經知道了如何創建應用程序和數據庫的鏈接,那麼打開數據庫鏈接後,應該怎樣
操做數據呢?這就須要Command對象。Command對象能夠對數據庫執行增、刪、改、
查的操做。
1.認識Command對象
.NET數據提供程序及相應的命令類
SQL數據提供程序
包括在System.Data.SqlClient命名空間中
鏈接類
SqlCommand
OLE DB數據提供程序
包括在System.Data.OleDb 命名空間
鏈接類
OleDbCommand
ODBC數據提供程序
包括在System.Data.Odbc 命名空間
鏈接類
OdbcCommand
Oracle數據提供程序
包括在System.Data.OracleClient 命名空間
鏈接類
OracleCommand
★Command 的主要成員
屬性名稱 說 明
Connection Command對象使用的數據庫鏈接
CommandText 執行的SQL語句
方法 說 明
ExecuteNonQuery 執行不返回行的語句,如UPDATE等
ExecuteReader 返回DataReader對象
ExecuteScalar 返回單個值,如執行COUNT(*)
本章主要介紹Command對象ExecuteScalar()方法的用法。ExecuteScalar()方法只返回查
詢結果中第一行第一列的值。當查詢結果只有一個數值時,一般調用這個方法,好比使
用聚合函數完成查詢時。通常狀況下,這個方法的返回值須要進行顯式類型轉換後才能
使用。
要使用Command對象,必須有一個可用的Connection對象,使用Command對象的步驟
包括如下幾步。
1.建立數據庫鏈接。
按照前面進過的步驟建立一個Connection對象。
2.定義執行的SQL語句。
將對數據庫執行的SQL語句賦給一個字符串。
3.建立Command對象。
使用已有的Connection對象和SQL語句字符串建立一個Command對象。
4.執行SQL語句。
使用Command對象的某個方法執行命令。
★11.數據庫查詢示例
★12.常見錯誤
1.沒有打開或關閉數據庫鏈接
在使用Command對象執行命令前,若是沒有執行connection.Open()語句,將會發生如
常見錯誤4所示的異常。
2.ExecuteScalar()方法的返回值沒有進行類型轉換
int num=comm.ExecuteScalar();
應該改爲
int num=(int)comm.ExcuteScalar();
由於ExecuteScalar()方法的返回值是Object類型的,因此用該方法的返回值爲其餘變量
作賦值操做時,必須進行顯式的類型轉換。
本章總結
本章介紹了ADO.NET的結構,利用ADO.NET技術能夠實現應用程序對數據庫的訪問操做。
1.ADO.NET是.NET Framework中的一組容許應用程序與數據庫交互的類。
2.ADO.NET的兩個主要組件是.NET Framework數據提供程序和DataSet。
3.NET 數據提供程序包括四個核心對象:Connection,Command,DataAdapter,DataReader。
4.Connection 對象用於創建應用程序和數據庫之間的鏈接,須要定義鏈接字符串,必
須顯式打開和關閉數據庫鏈接。
5.Command對象容許向數據庫傳遞請求,檢索和操做數據庫中的數據。
6.Command對象的ExecuteScalar()方法能夠檢索數據庫並返回一個值。
7.數據庫操做過程當中可能出現異常,可使用try-catch-finally語句處理異常。程序員