1 月 30
    public class Index
    {
        [DisplayName("必選修")]

        public string required { get; set; }

        /*name只能有一個,所以這兩段先註解掉
        [Required(ErrorMessage = "學生姓名不得為空白")]
        public string name { get; set; }

        [StringLength(10, ErrorMessage = "學生姓名不得超過10字元")]
        public string name { get; set; }
        */

        [StringLength(10, ErrorMessage = "學生姓名必須介於2-10字元", MinimumLength = 2)]
        public string name { get; set; }

        [Range(0, 100, ErrorMessage = "得分必須介於0~100之間")]
        public int point { get; set; }

        [System.Web.Mvc.Compare("re_password", ErrorMessage = "兩次密碼輸入不一致")]
        //上面沒有using System.Web.Mvc,所以這邊就要打完整的命名空間
        public string password { get; set; }
        public string re_password { get; set; }

        [RegularExpression( @"^[0-9]{2,4}-?[0-9]{3,4}-?[0-9]{-4}$", ErrorMessage = "請輸入正確的電話號碼")]
        public string phone { get; set; }

        [EmailAddress(ErrorMessage = "這不是E-mail格式")]
        public string studentmail { get; set; }

        [Url(ErrorMessage = "這不是網址標準格式")]
        public string url { get; set; }
    }
1 月 29
    public class GuestbookDB
    {
        GuestbookEntities1 db = new GuestbookEntities1();
        //GuestbookEntities1: 資料庫,如一個公司別的資料庫

        //新增一筆資料
        public void Create(string name, string content)
        {
            Contents NewData = new Contents();
            //Contents: 資料庫底下的一個Table
            //因db.Table.Add需要寫入完整的table,所以要先產生一個Content的物件,接收各欄位的值後,再回寫至DB
            //如果接收到是完整的table,就用下一個方法,直接add到DB即可

            NewData.name = name;
            NewData.content = content;

            db.Contents.Add(NewData);
            db.SaveChanges();
        }
        public void Create(Contents NewData)
        {
            db.Contents.Add(NewData);
            //Add語法似乎是資料庫(db)專用語法,所以不可以省略db,而直接用Table的Contenes.Add
            db.SaveChanges();
        }

        //修改資料
        public bool Update(int id, string name, string content)
        {
            //撈資料
            Contents Data = db.Contents.Find(id);
            //不同於Create有在記憶體先產生一個物件,這邊可以直接把Data指到資料庫的位置去做修改

            //判斷是否有資料
            if (Data != null)
            {
                //修改資料的值
                Data.name = name;
                Data.content = content;

                //儲存資料變更
                db.SaveChanges();

                return true;
                //對應到method宣告的會回傳bool值
            }
            else
            {
                return false;
            }
        }

        public bool Update(Contents UpdateData)
        {
            Contents Data = db.Contents.Find(UpdateData.Id);

            if (Data != null)
            {
                Data.name = UpdateData.name;
                Data.content = UpdateData.content;
                //之後可以試試直接Data=UpdateData看看

                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
            }

        }

        public bool Delete(int id)
        {
            Contents DeleteData = db.Contents.Find(id);

            if (DeleteData != null)
            {
                db.Contents.Remove(DeleteData);

                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
            }
        }

        //取得所有資料
        public List<Contents> GetList()
        {
            //取得Contents的資料,並轉成List
            List<Contents> ContentList = db.Contents.ToList();

            return ContentList;
        }

        //取得單一筆資料
        public Contents GetContents(int id)
        {
            Contents Data = db.Contents.Find(id);

            return Data;
        }
    }
1 月 24
namespace WebApplication1.Models
{
    public class GuestbookDB
    {
        GuestbookEntities1 db = new GuestbookEntities1();
        //GuestbookEntities1: 資料庫,如一個公司別的資料庫

        public void Create(string name, string content)
        {
            Contents NewData = new Contents();
            //Contents: 資料庫底下的一個Table

            NewData.name = name;
            NewData.content = content;

            db.Contents.Add(NewData);
            db.SaveChanges();
        }
        public void Create(Contents NewData)
        {
            db.Contents.Add(NewData);
            db.SaveChanges();
        }
    }
}
1 月 21
--新增含有三個欄位的TABLE
CREATE TABLE COURSE(
CNAME NVARCHAR(128) PRIMARY KEY,
CREDIT INT,
TEACHER NVARCHAR(30)
)

=========================

--在既有TABLE新增一個欄位
ALTER TABLE SCORE
ADD NEWFILED VARCHAR(10)

--修改欄位形態
ALTER TABLE SCORE ALTER COLUMN NEWFILED INT

--刪除欄位
ALTER TABLE SCORE DROP COLUNN NEWFILD 

=========================

--刪除TABLE
DROP TABLE dbo.AVERAGE
1 月 21
SELECT * FROM SCORE
  WHERE COURSE = '物件導向程式設計'
  
SELECT * FROM SCORE
  WHERE COURSE LIKE '%程式設計%'
  
SELECT * FROM SCORE
  ORDER BY SCORE DESC
  
================================

--SQL註解1
/*SQL註解2*/

================================

--別名
SELECT S.COURSE FORM SCORE S

===============================

--合併表格 INNER JOIN
SELECT P.NAME, S.SID, S.SCORE, S.COURSE
  FROM SCORE S
  INNER JOIN STUDENT P ON S.SID = P.SID
  
--簡化寫法
SELECT P.NAME, S.SID, S.SCORE, S.COURSE
  FROM SCORE S, STUDENT P
  WHERE S.SID = P.SID
  
==================================

--LEFT OUTTER JOIN
SELECT P.NAME, S.SID, S.COURSE, S.SCORE
  FROM SCORE S, 
  LEFT OUTTER JOIN STUDENT P ON S.SID = P.PID

--RIGHT OUTTER JOIN
SELECT P.NAME, S.SID, S.COURSE, S.SCORE
  FROM SCORE S, 
  RIGHT OUTTER JOIN STUDENT P ON S.SID = P.PID
  
--FULL OUTTER JOIN
SELECT P.NAME, S.SID, S.COURSE, S.SCORE
  FROM SCORE S, 
  FULL OUTTER JOIN STUDENT P ON S.SID = P.PID
1 月 18
INSERT..()
  VALUE..()

INSERT SCORE (SID, COURSE, SCORE)
  VALUES ('S001', '程式設計', 86)

INSERT SCORE (SID, COURSE, SCORE)
  VALUES ('A003', '程式設計', 74)

由於各欄位不可為NULL,故語法可以省略為下:

INSERT SCORE
  VALUE ('S002', '演算法', 77)

INSERT SCORE
  VALUE ('S003', '演算法', 57)

===============

UPDATE..
  SET..=
  WHERE..=

UPDATE SCORE
  SET COURSE = '物件導向程式設計',
      SCORE = 95
  WHERE SID = 'S001'

=================

DELETE FROM..
  WHERE..=

DELETE FROM SCORE
  WHERE SID = 'S003'

=================

SELECT * FROM SCORE

SELECT SID AS '學號', COURSE AS '科目名稱', SCORE AS '分數" FROM SCORE
1 月 13

1 月 9
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebApplication1.Models;
using WebApplication1.Services;

namespace WebApplication1.Controllers
{
    public class MessageController : Controller
    {
        messageDBService data = new messageDBService(); //實作Services的物件 (其含有兩個方法:1.取得資料庫資料並回傳 2.接收資料並寫進資料庫)
        // GET: Message
        public ActionResult Index()             //執行Index檢視頁面 (首頁或索引頁面)
        {
            return View(data.GetData());        //將資料傳回View (使用方法1.)
        }

        public ActionResult Create()            //執行Create檢視頁面 (新增資料的頁面)
        {
            return View();
        }

        [HttpPost]                              //當瀏覽器發送HTTP POST請求才會執行
        public ActionResult Create(string Article_title, string Content)        //當使用Create這個Action且有帶參數時
        {
            data.DBCreate(Article_title, Content);      //把資料寫進資料庫 (使用方法2.)

            return RedirectToAction("Index");           //回到Index這個Action
        }
    }
}
1 月 8
JAVA
Interface跟抽象class只要有定義方法,在class中就必須要再對此方法做完整的定義。

C#
將共同特性從類別中萃取的過程,稱之為抽象化。
abstract class:封裝同類型物件的共同特性,如機車、公車的車輛屬性。
interface:定義不同類型物件的共同特性,滑鼠、NB的USB介面。
	介面可視為一份合約,合約的內容可透過實作此介面的類別加以實現。
	利用介面將實作內容與定義分離,可為日後程式的開發及擴充性保留彈性。
	為介面命名時,習慣在最前面加上I,意指Interface。

abstract:一定要override,否則也要宣告為abstract
virtual:可改可不改
sealed:不可改
1 月 7
Interface: 定義為抽象的概念,與Class差別為,界面雖然有包含屬性與方法,但只宣告而不包含實作內容。
--類別只能"繼承"一個父類別,但能"實作"(語法跟繼承很像)多個介面。(老爸只能有一個,乾爹可以認很多個的概念)
--類別實作介面時,只會得到方法的名稱,不會包含任何實作內容。