2019/0401/SQL觸發程序&Asp.net自動寄信&認證信
SQLSERVER
觸發程序 TRIGGER
預存程序-> 結果
函數-> 值
觸發程序Trigger-> 最大差別在於,沒法透過呼叫,而是某個事件觸發後自動執行。
Ex. Updata delete 對資料定義或對資料有動作時觸發程序。
SQL 尾聲 交易程序
Update 從執行到 commit (交易成功),中間會檢測很多事情,
又稱為Transaction;access無法undo,交易一旦成功無法回復,
交易的特點(ACID),想像一下幾百萬人在使用資料庫,改了又改會怎樣?
中間會檢測很多事情,檢測什麼呢?會有很多檢核點,以UPDATA舉例
1.新增一筆新資料
2.將新資料丟入暫存資料inesrted,在最後commit成功時增加
3.將即將被刪除的資料放於deteted,再commit成功時刪除舊資料,
如果這三個步驟有一個錯,就會rollBACK,正確就會進入一堆檢核點,
Ex.各種下的條件約束check … ,最後會走到Trigger最後才會到commit(交易成功)。
Undo則是每一個步驟都有進行暫存。
前面檢核點無法檢核的商業邏輯可以藉由trigger做檢核,如沒過就可以rollback。
trigger分為兩種一種是跟著資料庫的,也有跟著資料表的
Ex.程式碼 after + 觸發時機

觸發程序執行順序大於Commit
Ex.2 將新增的資料在commit前全部秀出來
剛剛所有的例子都是 after trigger for insert
Ex.3 不符合商業邏輯就擋下來,
如果只能選四門課,選五門時必須退一筆才能新增。
在觸發程序內可能不能用等於比較要用大於等於、小於等於
Ex.4 改學分數時值不能小於原來的學分數
通常insert 與 delete 是互斥的較不會放在同一個trigger裡
Ex.5 兩個資料表實體上無關連邏輯上有關連。
為了保持完整性在刪除資料或增加時須考慮另外一張表資料相關性。
如果員工也是學生就不可更改與刪除資料。
不是擋下來而是取代
Instead trigger
不管再新增或是修改,沒有的資料就新增,既有的資料就修改。
如果課程資料表內的課程編號欄位內的課程編號,沒有就增加,有就修改
一個資料表配一個操作時只能用一次 instead
如果真的要使用兩次可以使用view,select 抓成一個view…
View通常拿來檢視資料,但其實可以新增修改刪除,
但沒有key則不會新增成功。
以上為資料表層級的觸發程序
接下來為資料庫觸發程序
DDL(資料定義語言) Trigger
但也不是所有的ddl 都可以放 trigger ,
且不能用instead(定義就是定義,並沒有執行取代資料)
暫時性要把觸發程序停止?IDE_GUI右鍵停用(要停止使用狀態)
停止資料表層級的觸發程序相當於修改TABLE的定義。
停止資料庫層級的觸發程序相當於修改SERVER上的定義。
一般 select * from table
一次全部讀取 -> 佔資源
資料指標Cursor 不止往前指還能往後指
相對於 asp.net sqldatareder
宣告靜態資料指標
宣告指標會佔資源,打開關閉後還必須要消除指標。
動指標 fetch 從第幾筆開始 位置為
不知道有幾筆 while
如果有讀到資料 @@FETCH_STATUS=0
沒資料的時候結束 @@FETCH_STATUS=-1
ASP.NET 系統寄送email
不可亂寄匿名信具有刑責
Mail server SMTP :兩台局端伺服器互相寄信,個人電腦是先寄到個人的Mail server局端,再藉由局對局做SMTP,以前可以匿名,因為濫用廣告信現在不能了,以前是使用POP3現在沒再用了,因為收取後就會消失;WebMail則是連線到伺服器去做寄送。
如何寄送?
在後端建造郵件伺服器位址物件
查詢domain cmd -> nslookup msa.hinet.net
簡單寄法 ( 純文字 )
myMail.send寄信的方法
看各自收件伺服器內的演算法
gmail會放在垃圾桶顯示

封包標頭


雅虎會錯殺一百收不到
第四層傳輸層 port
Ip 高雄港 > port 35號碼頭
ip分享器 第三層
Mac 網路卡 第二層
交換器(Switch) 第一層找到第七層
Google api 文件有說明如何登入個人gmail寄送信件
Using System.Net.Mail
Using System.Net
myMail.Credentials=new NetworkCredential帳號密碼方法
一般來講會放在資料庫中將帳號密碼讀近來
打開SSL進行加密myMail.EnableSsl = ture
以上為簡單的寄法
以下為較複雜的寄法
每一個都要建構為物件Ex.收件人 …
類別有兩種 mailaddress、mailmessage
建構完後ide就能顯示信件相關屬性做選擇

如果裡面要有圖則要用 html去寫,並且要打開html。
Msg.IsBodyHtml = ture; ( 有危險性,可以編寫惡意檔案。 )
myMail.Send(Msg) 有兩種輸入參數的方法,這裡一種上面一種。
降低帳號存取安全性。 Google 開啟 允許存取帳號
認證 判斷 效期 …
簡單方式 資料庫欄位預設未認證,發送信件附上超鏈結,點擊後判斷已認證。
自行研究
回到會員註冊33
增加@IsAuth欄位
將自動寄驗證信重新弄個函數
Protected 修飾詞 + void 沒有回傳值純呼叫 + 函數名稱 + ( 傳入參數 )
貼上34code
記得using
讀不到值 補傳入參數
修改34內容文本 認證還沒做 認證先做到這個地方
上面邏輯一進資料庫就呼叫此函數傳email參數值給此函數
完成認證只是將@IsAuth改為true
認證35寫認證
先回到33加上認證信網址
現在是測試所以網址為localhost,如果是實務則是公司的domain
從資料庫傳email與帳號近來
等等要秀 33 跟 35 的程式碼
題外話: 建置 = 編譯 與 鏈結 , 專案錯有時是別的檔案錯不是這隻檔案
實務上目的是要確認他的email為正確的才要做email認證。
33用網址帶參數過去35
QueryString抓網址上的參數集合包含(帳號)
有讀到就是有再回寫回去 (記得要用參數避免指令與值互用造成安全性問題) 秀認證完成訊息
完成
33註冊帳號寄送認證信 前端
33註冊帳號寄送認證信 後端
35認證信內頁內容 前端
35認證信內頁內容 後端
開啟command 執行完後執行期他的command前記得要關閉
忘記時直接查詢rd.Close();
如果認證沒成功記得要在登入時擋住或進去鎖住某些功能
明日待續… 要給會員自己修改資料,要如何讀圖片出來?
Gridview 鏈結 members ,現在欄位photo是檔案不是資料, 用讀資料的方法讀出來該怎麼顯示?
Gridview 自己跑出來的 columns 完全沒有物件可以顯示圖片
那用boundfield去資料繫結讀出來呢?
出來也會是system bytes …
Last updated
Was this helpful?
