วันอังคารที่ 27 สิงหาคม พ.ศ. 2556
อัพเดตโค๊ด Revisionล่าสุดมาMerge >> แล้วโค๊ดอะไรเปลี่ยนแปลงบ้าง
การใช้งาน Revision Control ในโปรเจกค์เขียนโปรแกรมที่มีขนาดใหญ่ถือว่าจำเป็นมาก เพราะเป็นเหมือนตัวช่วยให้เราทำงานแยกส่วนกับคนอื่นได้โดยอ้างอิงโค๊ดตรงกลาง ดังนั้นเมื่อใดก็ตามที่มีการแก้ไขไฟล์จะมีการเก็บ Log ส่วนที่เปลี่ยนแปลงไปกับ SVN ทำให้เราทราบ version ปัจจุบันว่ามีการปป.ไปถึงไหน และสามารถ revert กลับเพื่อกู้คืน version เดิมกรณีที่โค๊ดใหม่กระทบระบบส่วนรวม
แล้วเมื่อไฟล์เดียวกันถูกแก้ด้วย 2 คนหล่ะ
ถ้ามีการแก้ไขไฟล์พร้อมๆกัน คนที่ commit ไฟล์ขึ้นไปบน server ก่อนจะไม่ต้องกังวลเรื่องโค๊ดชนกัน แต่คนที่คอมมิตทีหลังจะต้อง Update โค๊ดตัวล่าสุดมาก่อน ซึ่งถ้าชนกันกับโค๊ดเดิม จะต้องเลือกโค๊ดอันใดอันหนึ่งก่อน Commit แต่ถ้าไม่ชนกันโค๊ดจะ Merge เข้าหากันทำมห้เราไม่ทราบว่า โค๊ดอะไรบ้างที่เปลี่ยนไปตามกาลเวลา
ถ้าใช้เต่า SVN (TortoiseSVN) และ plugin svn กับ visual Studio
บนโปรเจกของเราคลิกขวาที่ไฟล์ที่เพิ่ง update มาใหม่ >> เลือก Show Different from xxx.cs แล้ว SVN จะทำการเปรียบเทียบไฟล์ของเรากับ Version ล่าสุดว่ามีส่วนไหนที่แตกต่างกันบ้าง โดย
- สีเขียว : โค๊ดที่ฝั่งเราเพิ่มลงไป
- สีแดง : โค๊ดที่ฝั่งเค้ายังไม่มี หรือโดนลบ
โค๊ดในหน้าต่างทางซ้ายมือคือฝั่ง server ส่วนทางขวามือคือโค๊ดของเรา เพียงเท่านี้เราก็สามารถ อัพเดตโค๊ดแล้วเอามาดูความแตกต่างได้ง่ายๆ
นอกจากนี้ยังสามารถดูความแตกต่างของแต่ละ revision ได้ด้วยการ คลิกขวาที่หัว solution คลิก VisualSVN > Show Log.. เพื่อเเสดง Log ไฟล์ทั้งหมดที่ถูกคอมมิต > เลือกไฟล์เดียวกัน 2 ไฟล์ที่ต่าง revision > เลือก Compare Revision จะปรากฎหน้าต่างซ้ายขวาเหมือนเดิม แต่คราวนี้จะเเสดงสีเหลืองที่โค๊ดที่แตกต่างกัน
ส่วนคำสั่ง Show different as unified diff จะใช้เพื่อแสดงเฉพาะโค๊ดตัวล่าสุดว่ามีการอัพเดตส่วนไหนไปบ้าง
พอใช้ SVN เเล้วการควบคุม version เป็นเรื่องง่ายไปเลย ยิ่งบน Windows มีเต่าSVN ที่ใช้งานง่ายมากๆ นึกถึงตอนเรียนที่พองานแต่ละคนเสร็จก็ก็อปใส่ Handy Drive มารวมกันแล้วแก้กันยาวมากๆ นึกแล้วตลกตัวเอง
วันจันทร์ที่ 26 สิงหาคม พ.ศ. 2556
รู้จักกับ ADO.Net frame work แล้วถึงตา SqlConnection บน C#
นอกจาก Modelง่ายๆของ Linq ที่พูดถึงในโพสที่ผ่านมาบน Winform ก็มีชุดคำสั่งที่ใช้ในการเชื่อมต่อฐานข้อมูลเช่นเดียวกันซึ่งไม่ได้ยากและซับซ้อนอะไรแต่จะมีข้อแตกต่างจาก Linq ที่ผมพบเจอก็คือ
1 ต้องใส่ Connecttion String ก่อนดึงข้อมูลมาแต่ละครั้ง ซึ่งน่าจะช่วยในเรื่องความปลอดภัยในการเข้าถึงข้อมูลระดับหนึ่งซึ่ง ADO.Net นั้นใช้การผูก model กับเบสตั้งแต่ครั้งแรกที่เริ่มสร้าง ทำให้การเข้าถึงนั้นง่ายเพียงแค่เรียก Data Entities ขึ้นมาแล้วอัพเดตเบสด้วยลิงคิว (เดี๋ยวศึกษาต่อเรื่อยๆครับ แล้วจะมาเล่าอีกที)
2 การคิวรี่ต้องใช้ string ที่เป็นภาษา sql นั้นคือจะรู้ว่าคิวรี่ถูกหรือผิดนั้นต้อง execute query ก่อนเพื่อรับผลลัพธ์มา แต่ ถ้าเป็น Linq จะง่ายกว่าเยอะ เพราะสามารถselectข้อมูลสดๆมาและรู้ด้วยว่ามีคอลัมม์ไหนบ้างบนฐานข้อมูล ซึ่งช่วยย่นเวลาได้เยอะทีเดียว
โค๊ดที่ใช้เรียกข้อมูลก็ง่ายๆ ไม่กี่ step ตามนี้
import libary โดย using System.Data.SqlClient;
ใช้ class SqlConnection สร้างคอเน็กชั่นใหม่ขึ้นมา
SqlConnection sqlConn = new SqlConnection(ConnectionString);
โดยพารามิเตอร์ของ ConnectionString มีดังนี้
1 Host Server ที่ต้องการ connect : Data Source
2 ฐานข้อมูลที่จะ connect : Initial Catalog
3 Username ของ host server : User ID
4 Password ของ Host server : Password
ถ้าผ่านมาได้อย่างสมบูรณ์จนถึงขั้นตอนนี้ ก็เริ่มต้นดึงข้อมูลได้เลย เริ่มจากการ open Connection ก่อน
sqlConn.Open();
แล้วสร้างคำสั่ง sql โดยสร้างจาก class : SqlCommand
SqlCommand sqlComm = new SqlCommand();
แล้วทดสอบคิวรี่select ง่ายๆจากตาราง User ที่ผมสร้างไว้ในเบสด้วยคิวรี่นี้
"SELECT * FROM [dbo].[User]" >> เลือกทุกอย่างที่อยู่ในตาราง User
เสร็จแล้วเราจะได้ผลลัพออกมา ส่งต่อให้กับตัวแปร reader ของ class SqlDataReader ซึ่งเป็นคลาสที่รองรับการอ่านค่าจากฐานข้อมูลซึ่งมีลักษณะตัวแปรเป็น Array นั่นหมายความว่าเราสามารถอ้างอิงตัวแปรแต่ละช่องได้โดย ชี้อินเด็กไปอ้างอิงเเต่ละ column นอกจากนี้ ยังมีคำสั่งง่ายๆให้การตรวจสอบว่าคิวรี่ที่ส่งไป return ข้อมูลกลับมาไหม ด้วยคำสั้ง
reader.HasRows ซึ่งจะ >= 1 ถ้ามีข้อมูลรีเทิร์นกลับ
ข้างล่างนี้เป็น โค๊ดสมบูรณ์ ลองโหลดไปทดลองดูกันได้ครับ กับ SQLบน windows application
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleSqlConnect
{
class Program
{
static void Main(string[] args)
{
string table = "[dbo].[User]";
SqlDataReader reader = null;
string ConnectionString = GetConnectionString();
SqlConnection sqlConn = new SqlConnection(ConnectionString);
try
{
sqlConn.Open();
Console.WriteLine("Connected");
using (SqlCommand sqlComm = new SqlCommand())
{
string query = string.Concat("SELECT * FROM "+table);
sqlComm.CommandText = query;
sqlComm.CommandType = CommandType.Text;
sqlComm.Connection = sqlConn;
reader = sqlComm.ExecuteReader(); // exe query
while (reader.Read())
{
Console.WriteLine(reader[0] + " " + reader[1] + " " + reader[2]);
}
}
sqlConn.Close();
}
catch(Exception ex)
{
Console.WriteLine("Connect fail");
}
Console.ReadLine();
}
private static string GetConnectionString()
{
string strConnect = "";
string localhost = "(local)";
string userName = "sa";
string Password = "12345";
string Catalog = "Sample";
strConnect = "Data Source=" + localhost + ";Initial Catalog=" + Catalog + ";User ID=" + userName + ";Password=" + Password + "";
return strConnect;
}
}
}
วันอาทิตย์ที่ 25 สิงหาคม พ.ศ. 2556
วิธีการเป็น Administrator บน PC ของตัวเอง
ผมว่าออกจะน่าขำไปสักนิด กับการที่เครื่องคอมพิวเตอร์ของตัวเองแท้ๆแต่กลับ log in เข้าใช้ได้เพียง User ธรรมดาซึ่งจะโดนจำกับสิทธิในการการทำที่มีการดัดแปลงระบบทั้งหมด ซึ่งต้องมานั่งคอยคลิกขวา run as administrator เพื่อใช้งานบางฟังชั่นของ Windows ได้ครบ
เรื่องมีอยู่ว่าผมต้องการลบ assembly ตัวหนึ่งที่อยู่ใน drive C:/Windows/assembly ซึ่งผมทำการ Uninstall โปรแกรมไม่สมบูรณืเองทำให้ไม่ได้ล้างค่าใน assembly ไปด้วย ดังนั้นพอรันโปรแกรมผมเลยมีปัญหาว่ายังเห็นเอสเซมบรี่ตัวเก่าอยู่ซึ่งเวอร์ชั่นที่ซ้ำกันทำให้ทำงานต่อไม่ได้(เลือกไม่ได้ว่างั้น)
การลบต้องการสิทธิของ admin ซึ่งทดลองรัน as admin ด้วย Expplorer แล้วลองลบดูก็ยัง access denied
อ้าวงี้กวนละครับคุณ win7 ไม่ได้ให้สิทธิแอดมินจริงๆกับเรา แบบนี้ต้องเจอไม่เด็ด เปิด cmd(command promt) ด้วยสิทธิ admin ขึ้นมาก่อน ถ้าเปิดถูก location ปัจจุบันจะอยู่ที่ C:/Windows/system32
แล้วจัดโค๊ดชุดนี้ลงไปเลยครับ : net user administrator /active:yes
เท่านี้ครับเราก็เพิ่ม User ที่เป็น admin ขึ้นมาได้แล้ว >> ทำการ switch user ไป log on ที่ Administrtor
เเล้วสิทธิทั้งหมดก็เป็นของเรา ตอนนี้เราก็สามารถทำการ แก้ไข ดัดแปลงทุกสิ่งอย่างได้ตามใจอยากเลยครับ อย่างผมอยากลบ assembly กวนใจก็ไม่ใช่ปัญหาอีกต่อไป
ถ้าต้องการเอาสิทธิแอดมินออกก็เพียงเปลี่ยนคำสั่งเดิมจาก Yes เป็น No
เรื่องมีอยู่ว่าผมต้องการลบ assembly ตัวหนึ่งที่อยู่ใน drive C:/Windows/assembly ซึ่งผมทำการ Uninstall โปรแกรมไม่สมบูรณืเองทำให้ไม่ได้ล้างค่าใน assembly ไปด้วย ดังนั้นพอรันโปรแกรมผมเลยมีปัญหาว่ายังเห็นเอสเซมบรี่ตัวเก่าอยู่ซึ่งเวอร์ชั่นที่ซ้ำกันทำให้ทำงานต่อไม่ได้(เลือกไม่ได้ว่างั้น)
การลบต้องการสิทธิของ admin ซึ่งทดลองรัน as admin ด้วย Expplorer แล้วลองลบดูก็ยัง access denied
อ้าวงี้กวนละครับคุณ win7 ไม่ได้ให้สิทธิแอดมินจริงๆกับเรา แบบนี้ต้องเจอไม่เด็ด เปิด cmd(command promt) ด้วยสิทธิ admin ขึ้นมาก่อน ถ้าเปิดถูก location ปัจจุบันจะอยู่ที่ C:/Windows/system32
แล้วจัดโค๊ดชุดนี้ลงไปเลยครับ : net user administrator /active:yes
เท่านี้ครับเราก็เพิ่ม User ที่เป็น admin ขึ้นมาได้แล้ว >> ทำการ switch user ไป log on ที่ Administrtor
เเล้วสิทธิทั้งหมดก็เป็นของเรา ตอนนี้เราก็สามารถทำการ แก้ไข ดัดแปลงทุกสิ่งอย่างได้ตามใจอยากเลยครับ อย่างผมอยากลบ assembly กวนใจก็ไม่ใช่ปัญหาอีกต่อไป
ถ้าต้องการเอาสิทธิแอดมินออกก็เพียงเปลี่ยนคำสั่งเดิมจาก Yes เป็น No
สมัครสมาชิก:
บทความ (Atom)