2014年6月16日 星期一

2014年6月12日 星期四

[Sql][Error] 無法解析 equal to 作業中 Latin1_General_CI_AI 與 Chinese_Taiwan_Stroke_CI_AS 之間的定序衝突

Q : 無法解析 equal to 作業中 Latin1_General_CI_AI 與 Chinese_Taiwan_Stroke_CI_AS 之間的定序衝突

A:
0.google得知,可能是資料庫有升級產生版本差異,但是網頁中只有特定一頁有問題,所以聚焦在那頁的SQL語句

1. 觀察錯誤頁面裡面資訊....會找到是哪一個page出問題...最後發現在某個uc_control 預存程序內。

2.觀察預存程序的SQL ,有開暫存的table,這在網路上有看到相似問題,因為資料庫tempdb定序與當下定序不同。

3.參考此網站 -> 將temptable 後面加上 COLLATE database_default

ex.
  1.  CREATE TABLE #TmpCategory ( [ContentId] CHAR(36) COLLATE database_default)
  2.     CREATE CLUSTERED INDEX CIX_#TmpCategory ON #TmpCategory([ContentId] ASC)


4.更新後,即解決定序不同的問題

2014年6月11日 星期三

[Sql] trigger 簽到資料表練習~ after 與 instead of 差別

Q: after 與 instead of 的差別

A: 顧名思義,after 會先把資料insert到資料表,然後在去判斷trigger裡面的邏輯
instead of 則是執行的sql會先暫存,然後執行trigger,並依trigger 的sql去寫入。

我的狀況是一個簽到狀況,當使用者是第一次簽到,則增加積分,如果使用instead of的話,我還要額外再寫一次insert into到簽到的資料表,這也會衍生其他問題,例如之後有新增簽到欄位,這邊也要跟著改。

所以這邊使用after(請看SQL第三行)較好。

  1. CREATE TRIGGER Tri_Demo
  2.         ON Gps_SignIn
  3. AFTER INSERT
  4. AS
  5. BEGIN
  6.         IF (SELECT COUNT(g.account)
  7.                         FROM Gps_SignIn g
  8.                         INNER JOIN INSERTED i ON i.OID = g.OID AND g.account = i.account
  9.                 ) <= 1
  10.         BEGIN
  11.                 --新增簽到分數
  12.                 INSERT INTO Bonus (ContentId,Account,TYPE,CreateTime,Bonus)
  13.                 SELECT '', i.account, 1, GETDATE(), 999
  14.                 FROM INSERTED i
  15.         END
  16. END

2014年6月3日 星期二

[C#] 用Gmail Stmp 發送信件


  1. private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             MailMessage mail = new MailMessage();
  4.             NetworkCredential cred = new NetworkCredential("帳號@tech.com.tw", "密碼");
  5.             //收件者
  6.             mail.To.Add("mess@gmail.com");
  7.             mail.Subject = "subject";
  8.             //寄件者
  9.             mail.From = new System.Net.Mail.MailAddress("mess@gmail.com");
  10.             mail.IsBodyHtml = true;
  11.             mail.Body = "message";
  12.             //設定SMTP
  13.             SmtpClient smtp = new SmtpClient("smtp.gmail.com");
  14.             smtp.UseDefaultCredentials = false;
  15.             smtp.EnableSsl = true;
  16.             smtp.Credentials = cred;
  17.             smtp.Port = 587;
  18.             //送出Mail
  19.             smtp.Send(mail);
  20.         }