2020年11月23日 星期一

DB,建置資料庫 MSSQL+ASP.Net (Win2019)

這篇主要是
透過一步一步的教學
實作出簡單的MSSQL+IIS的asp.net網站出來

人在江湖走哪有不挨刀
不只要會網路、系統,還要會DB....
什麼東西都要會啊~

有時候
設定完網路,架好系統
但上面沒有AP層的東西去試Run...
心裡總覺得不踏實

為了解決這個問題
只好收拾起很早很早以前的硬技術...
用講的很多人都會
但實際要寫個東西出來,就...

最早剛踏入IT領域時
是從電腦硬體開始的進入的
第一個接觸的領域硬體
但因為什麼都缺,當時硬體又貴
於是轉向到DB領域
不過後來因為情境不多缺乏練功的情境
時間一久,漸漸的就被網路領域填滿了我的時間
好了~不多說~我們繼續吧~

原本
是想說設計2層式架構的
即DB和WEB在不同主機上
這樣比較符合一般業界的作法
只是我的LAB環境還要跑其他的程式
做作罷了~

好了~首先 
我們要準備一台Windows
我用的是 Windows 2019,因為比較"安靜"
整個建置的過程比較少要我去連外網更新什麼東西~
IP為: 10.1.0.23
GW為: 10.1.0.254





一、安裝 SQL Server 2019 Express
二、安裝 SQL Server 管理工具(SSMS)
三、安裝 Visual Studio Community 2015
四、新增 Windows 2019 的 IIS 角色
五、設定 SQL 安全性(透過SSMS)
六、設定 SQL 協定
七、設定 IIS
八、建置設計DB、tables...等等
九、透過VS撰寫 ASP.net
十、透過Web驗證 asp.net 網站
十一、可能問題



一、安裝 SQL Server 2019 Express
安裝沒有,太困難的地方
反倒是,要取得ISO檔,可能要找一下
沒關係~
我準備好了~可以參考下方連結

下載頁面
https://www.microsoft.com/zh-tw/sql-server/sql-server-downloads

下載點
https://go.microsoft.com/fwlink/?linkid=866658

我的OS
是用Windows 2019
所以不用再安裝有的沒有的套件
下圖
是我將SQL和SSMS(SQL的管理工具)
整成一個ISO檔,方便我未來使用

選擇第一個
【新增SQL Server 獨立安裝或將功能加入至現有安裝】


【下一步】


【下一步】


我的原則是
這是LAB環境
能不出WAN去更新,就不要去更新
【下一步】


記得把【機器學習服務和語言延伸模組】給取消勾選喔
不需要去安裝這個
不然,SQL安裝過成會連到WAN下載套件


勾選【Local DB】
不知道這是什麼
難道會是類似Office的北風資料庫


【下一步】
不過可以記一下
具名執行個體為: SQLExpress
執行個體識別碼為: SQLEXPRESS


【下一步】


開始安裝囉~


安裝完成


二、安裝 SQL Server 管理工具(SSMS)
SSMS
全名為 SQL Server Management Studio

安裝SQL Server後
接下來就是安裝SQL Server的管理工具(SSMS)
這幾乎是必裝的
有玩SQL的一定會知到這個

和SQL Server一樣
安裝上甚至更簡單了
反而是要找下載點要花點時間就是了
下載點
https://docs.microsoft.com/sql/ssms/download-sql-server-management-studio-ssms

我是和SQL Server等合成1個ISO檔案
所以直接就安裝囉~

安裝

等等等~

安裝完成

三、安裝 Visual Studio Community 2015
既然是要寫DB+WEB
有了SQL Server後
接下來就是要有開發環境

而SQL Server搭配的WEB
很明顯,就是 ASP.net
很久以前
有玩過asp,到後來asp.net....等等

開發環境
現在有Visual Studio這麼強大的工具
原本我是用Visual Studio 2019
但安裝過程和安裝後都問我一堆有的沒的
又要我去更新什麼KB,真的很煩

於是
確認支援的 framework 沒問題後
就改用 Visual Studio Community 2015 版本
就安靜多了~

至於下載點...
官網可能已經下載不到了,各位強大的網友們
這是考驗google搜尋功力的時候啦~

我就繼續開始安裝吧~


【安裝】


安裝中...


安裝完成
從開始到結束,我只按了一個按鈕
是不是容易不少~


四、新增 Windows 2019 的 IIS 角色
我的OS
為 Windows 2019
因為用的是 ASP.net,所以勢必用IIS當作WEB Server
是最佳選擇

伺服器管理員


【新增角色及功能】
以下是,我是已經安裝IIS完成的截圖


【下一步】


【下一步】


【下一步】


這邊可能要注意一下
因為預設的情況
你僅勾選【網頁伺服器】選項可能還不夠
要展開後繼續勾選細部的功能
應用程式開發>NET擴充性4.7(打勾)
應用程式開發>ASP(打勾)
應用程式開發>ASP.NET 4.7(打勾)
應用程式開發>ISAPI篩選器(打勾)
應用程式開發>ISAPI擴充程式(打勾)
應用程式開發>WebSocket通訊協定(打勾)
應用程式開發>伺服器端包含(打勾)
應用程式開發>應用程式初始化(打勾)


【下一步】


因為我先前
已經安裝過IIS了
所以這邊,我僅補上
安裝 WebSocket通訊協定 元件即可

安裝完成


五、設定 SQL 安全性(透過SSMS)
預設安裝SQL Server後
是需要做一些設定的
這個設定,透過SSMS連入SQL Server後,進行設定

剛剛安裝過,現在執行他吧~


連線
預設會自動帶入伺服器名稱
順便驗證一下,是否可以正常連入 SQL Server




在MSSQL上方,點滑鼠【右鍵】
選擇【Facet】



在Facet的地方
下拉式選單,選到【伺服器組態】
然後在下方
找到 RemoteAccessEnable確認值為 True
讓選端可以存取此SQL Server


在MSSQL上方,點滑鼠【右鍵】
選擇【屬性】



伺服器驗證
選擇【SQL Server 及 Windows 驗證模式】

伺服器 Proxy 帳戶
勾選【啟用伺服器 Proxy帳戶】
輸入 Proxy 帳戶 為: sa
密碼為: OS的密碼



提示要重新啟動才會生效
不過,現在我後續還有要設定的地方
先不將OS給重新啟動~



六、設定 SQL 協定
繼續設定SQL的協定
執行 SQL Server 2019 設定管理員


確認以下2個,狀態為 已啟用
若沒有啟用,就手動啟用他吧~
在SQLEXPRESS 的通訊協定>TCP/IP(啟用)
SQLEXPRESS 的通訊協定>具名管道(啟用)


再點選把 TCP/IP 右鍵
選擇【內容】


點到【IP 位址】
拉到最下方
把動態通訊port 拿掉
TCP port輸入 1433


SQL Server>(重新啟動)


將OS
重新啟動~


重新啟動OS後
可以查詢看看port 1443有沒有listen
#netstat -ano | find "1433"




七、設定 IIS
重新啟動後
我們繼續設定IIS
此OS的IP為: 10.1.0.23
預設會開啟 IIS 的網頁


開啟
Internet Information Services (IIS) 管理員

左邊樹狀目錄
點到 Default Web Site>預設文件


去新增1個文件
檔名叫做 Lab_db_index.aspx

然後重啟服務


八、建置設計DB、tables...等等
終於完成
前面這些的前置設定後
現在開始進行DB的設計囉~

此章節
細分以下小節,方便網友閱讀
8-1. DB規劃
8-2. 建立 DB
8-3. 建立 table
8-4. 新增 紀錄
8-5. 查詢 紀錄


8-1. DB規劃
我的DB設計上
結構很單純,我不想要把所有紀錄都在一個table上
而是多個table互相去關聯

在實際撰寫之前
先進行DB的規劃,大致上如下


關聯如下



8-2. 建立 DB
我就用SQL語法去建立
比較快
當然,因為我預計把此DB的實體檔案位置
放置到C:\TEST的目錄下
所以要先在C:\下建立TEST的目錄
不然等會下SQL語法時就會出現錯誤喔~


開啟 SSMS


連到 SQL Server


在最上層MSSQL按下滑鼠【右鍵】
選擇【新增查詢】




貼上SQL語法後
按下【執行】
//////////////////
Create DataBase [LabDB_employee] ON( 
  Name = LabDB_employee_dat,
  FileName = 'C:\TEST\LabDB_employee.mdf',
  Size = 10,
  MaxSize = 50,
  FileGrowth = 5
);
//////////////////


執行SQL語法,成功


8-3. 建立 table
接著
按照DB的規劃
建立以下3個 Table

建立 員工table為 table_employee
//////////////////
USE LabDB_employee;
CREATE TABLE table_employee (
  id int IDENTITY(1,1),
  no_emp varchar(20),
  name varchar(20),
  sex varchar(10),
  year INT,
  depar varchar(20),
  no_title varchar(10),
  PRIMARY KEY (id)
);
//////////////////



建立 薪資table為 table_pay
//////////////////
USE LabDB_employee;
CREATE TABLE table_pay (
  id int IDENTITY(1,1),
  no_emp varchar(20),
  pay INT,
  PRIMARY KEY (id)
);
//////////////////

建立 職稱table為 table_title
//////////////////
USE LabDB_employee;
CREATE TABLE table_title (
  id int IDENTITY(1,1),
  no_title varchar(10),
  title varchar(30),
  PRIMARY KEY (id)
);
//////////////////

8-4. 新增 紀錄
有了 table 之後
接下來就是要塞資料進去到各個table囉~

新增資料到 table_employee
//////////////////
USE LabDB_employee;
INSERT INTO table_employee (no_emp, name, sex, year, depar, no_title)
values
('HN0001', '髒無忌', '男', 40, '管理部', 'T001'),
('HN0002', '尾小寶', '男', 39, '管理部', 'T002'),
('HN0003', '謝大訊', '男', 32, '產品部', 'T002'),
('HN0004', '張三瘋', '女', 19, '業務部', 'T002'),
('HN0005', '葉小氫', '男', 31, '技術部', 'T002'),
('HN0006', '白云手', '女', 32, '技術部', 'T003'),
('HN0007', '無影角', '男', 33, '技術部', 'T003'),
('HN0008', '嚴小勇', '男', 34, '庶務部', 'T004'),
('HN0009', '陳少林', '男', 30, '技術部', 'T003'),
('HN0010', '照武當', '男', 36, '技術部', 'T003'),
('HN0011', '王峨嵋', '女', 37, '技術部', 'T003');
select * from table_employee;
select * from table_employee;
//////////////////




新增紀錄到 table_pay
//////////////////
USE LabDB_employee;
INSERT INTO table_pay (no_emp, pay)
VALUES
('HN0001', 99990),
('HN0002', 95000),
('HN0003', 85000),
('HN0004', 85000),
('HN0005', 75000),
('HN0006', 66000),
('HN0007', 66000),
('HN0008', 22000),
('HN0009', 75000),
('HN0010', 66600),
('HN0011', 66600);
select * from table_pay;
//////////////////


新增紀錄到 table_title
//////////////////
INSERT INTO table_title (no_title, title)
VALUES('T001', '總裁'),
('T002', '經理'),
('T003', '副理'),
('T004', '工友');
select * from table_title;
//////////////////



8-5. 查詢 紀錄
接下來
就來驗證一下囉~
我這邊用的是關聯資料庫
所以在table的部分,也是互作關聯的
關於SQL語法的部分,這邊就不多做說明
這又是一個領域了~

顯示員工資料含薪資、職稱
//////////////////
select table_employee.id, table_employee.no_emp as '員工編號', table_employee.name as '姓名', table_employee.sex as '性別', table_employee.year as '年齡', table_employee.depar as '部門', table_pay.pay as '薪資', table_title.title as '職稱'
from table_employee 
LEFT JOIN table_pay ON table_employee.no_emp = table_pay.no_emp
LEFT JOIN table_title ON table_employee.no_title = table_title.no_title;
//////////////////

九、透過VS撰寫 ASP.net
MS SQL的部搞定後
現在來撰寫WEB程式

執行剛剛安裝好的
Visual Studio 2015


首次執行 Visual Studio
他會問你要不要登入
當然是不要囉~



選定
自己習慣的開發語言
C和VB兩種,我對VB比較熟悉一點
佈景顏色,我就選藍色



檔案>開啟網站


選擇
本機IIS>IIS網站>Default Web Site
這樣指的就是
開啟剛剛新增好IIS角色的Web 


將滑鼠移動到【方案總管】
並點一下,下方樹狀中最上層的【http://localhost/】,按下滑鼠右鍵
選擇【加入】>【加入新項目】



左邊,選擇語言【Visual Basic】
中間,選擇【Web 表單】
下方,給定名稱為 lab_db_index.aspx
並取消勾選【將程式碼置於個別檔案中】



點一下
下方的【設計】
我們用 設計模式 來撰寫~



左邊,點一下【工具箱】
並點一下 迴紋針 的icon 讓工具箱固定在視窗左邊
然後將【SqlDataSource】拖曳到如圖中的位置後
再點一下【設定資料來源】


按下【新增連接...】


選擇【Microsoft SQL Server】作為資料來源


伺服器名稱
輸入的值就跟透過SSMS去連SQL Server的方式一樣
這邊我輸入 MSSQL\SQLEXPRESS
下方下拉式選單,選擇資料庫名稱【LabDB_employee】
然後點一下【測試連接】



測試連接成功


按下確定


下一步


下一步


選擇【指定自訂SQL陳述式或預存程式】
Visual Studio會幫你寫好SQL語法
當然這是在一個table的情況下蠻適用的
但我的LAB是多個table做關聯,就要自己手動刻了~



將下方語法貼到
SQL陳述式中
然後【下一步】

SQL語法主要在
顯示員工資料含薪資、職稱
/////////////////////
select table_employee.id, table_employee.no_emp as '員工編號', table_employee.name as '姓名', table_employee.sex as '性別', table_employee.year as '年齡', table_employee.depar as '部門', table_pay.pay as '薪資', table_title.title as '職稱'
from table_employee 
LEFT JOIN table_pay ON table_employee.no_emp = table_pay.no_emp
LEFT JOIN table_title ON table_employee.no_title = table_title.no_title;
/////////////////////


按下【測試查詢】
就會看到查詢的結果
再按下【完成】


剛剛
建好了 SQLDataSource 的物件
也測試連接SQL Server 查詢式成功的了~

但在asp.net中
現在還沒有可以呈現SQL查詢的物件
所以現在將【GridView】拖曳到畫面中的位置
然後點一下【選擇資料來源】為SqlDataSource1



勾選【啟用分頁】、【啟用排序】
這個功能
不論在多個table互相關聯時都可以用



點一下【自動化格式】


選一個好看的格式


這樣簡單的
asp.net的SQL查詢網站就完成囉~
記得要去【存檔】啊~



十、透過Web驗證 asp.net 網站
因為
我們是透過 開啟網站的 方式
邊撰寫asp.net的
而這個開啟網站,所開啟的就是本機的IIS中的網站
也就是說,當我在Visual Studio存檔完成後
就可以直接透過Browser去開啟指定的IP就可以瀏覽網站囉~

有沒有
很像多年前國外的某資安事件
撰寫網站的人,和網站管理人員是分開的(本該這樣沒錯)
撰寫網站的人用DW去寫php網站
但他習慣 開啟網站 的方式去寫,馬上就能上線~也可以理解
但他沒注意到 寫網站都會有個暫存的檔案 xxx.php~ 之類的
就這個暫存檔被有心人士發現了
而檔案裡面有連結DB的IP和帳號密碼...
就gg惹~

回到本篇
這個LAB的測試URL為
http://10.1.0.23/lab_db_index.aspx



十一、可能問題
在透過Browser驗證時
若出現以下訊息
使用者 'IIS APPPOOL\DefaultAppPool' 的登入失敗。 
的訊息時


就請到IIS去設定
MSSQL>應用程式集區>DefaultAppPool>進階設定



在識別的地方
設定 administrator 帳號進去吧~

沒有留言:

張貼留言