\

Facebook


วันอังคารที่ 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



หลังจากนั้นทดลองรันโปรแกรมเพื่อคอเน็คทดสอบดูครับ ถ้าไม่เป็ค่า Null แสดงว่า Connect สมบูรณ์

ถ้าผ่านมาได้อย่างสมบูรณ์จนถึงขั้นตอนนี้ ก็เริ่มต้นดึงข้อมูลได้เลย เริ่มจากการ 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

May be like this posts