10 กุมภาพันธ์ 2554

VB.Net กับ Transaction

Transaction เป็นกลุ่มคำสั่งที่สร้างขึ้นเพื่อการประมวลผลข้อมูล โดยที่กลุ่มคำสั่งของทรานแซกชันถือว่าเป็นหน่วยของงานที่ไม่สามารถแบ่งแยกออกเป็นส่วนย่อยได้อีก การทำงานจะทำตั้งแต่ต้นจนเสร็จสิ้นภายใต้หน่วยของทรานแซกชันนั้น หากเกิดเหตุอันไม่คาดคิดขณะประมวลผลคำสั่ง เช่น ระเบิดภูเขา เผากระท่อม ไฟดับ สายสัญญาณขาดหาย โปรแกรมผิดพลาด .... แล้วมีผลมาทำให้คำสั่งหยุดกลางครัน การทำงานที่ผ่านมาตั้งแต่เริ่มทำ Transaction ก็จะกลับสู่สภาพเดิมก่อนที่จะมีการทำ Transaction

ตัวอย่าง เช่น การโอนเงินผ่านธนาคาร จาก นาย ก.  ไปให้ นาย ข. ถ้าเรามองการทำงานเวลาเราไปโอนเงินผ่านตู้ ATM เราจะเห็นว่ามีการทำงานแค่ครั้งเดียว คือ นาย ก. ไปโอนเงิน (เป็นการมองในระดับ High Level) แต่ในอีกมุมนึง การทำงานของโปรแกรม ซึ่งเป็นส่วนของการประมวลผลคำสั่งและปรับปรุงข้อมูลลงฐานข้อมูล จะเกิดขั้นตอนการปรับปรุงข้อมูลอย่างน้อย 2 คำสั่ง (มองในระดับ Low Level) คือ คำสั่งแรก จะต้องปรับปรุงข้อมูลของนาย ก. โดยลดยอดลง  คำสั่งที่สอง จะเป็นการปรับปรุงข้อมูลโดยการเพิ่มเงินในบัญชีของนาย ข. ลักษณะนี้ เราจำเป็นต้องมีการทำ Transaction เพื่อป้องกันเหตุสุดวิสัยที่อาจจะทำให้การปรับปรุงข้อมูลข้างต้นไม่ให้เกิดข้อผิดพลาดในการปรับปรุงข้อมูลเกิดขึ้น

คุณสมบัติของทรานแซกชัน ประกอบด้วย
1. Atomicity คือ ความเป็นหนึ่งเดียว : การทำงานของกลุ่มคำสั่งภายใต้ทรานแซกชันจะถูกประมวลผลเสมือนเป็นคำสั่งเดียวกัน
2. Consistency คือ ความถูกต้องของข้อมูล : การทำงานของทรานแซกชันไม่ว่าจะสำเร็จหรือล้มเหลว ข้อมูลจะต้องสอดคล้องกันเสมอ
3. Isolation คือ การทำงานที่เป็นอิสระแกกัน : การทำงานของทรานแซกซันแต่ละทรานแซกชันจะเป็นอิสระจากกัน ข้อมูลที่ถูกปรับปรุงในทรานแซกชันหนึ่งจะไม่มีผลกันอีกทรานแซกชันหนึ่ง
4. Durability คือ ความคงอยู่ : ข้อมูลทั้งหมดจะคงอยู่หลังจากผ่านการคอมมิตทรานแซกชันแล้ว (commit transaction) ไม่ว่าจะเกิดเหตุการณ์ ระเบิดภูเขา เผากระท่อม หรืออื่น ๆ ก็ตาม

ตัวอย่าง การเขียนคำสั่งจัดการ Transaction ด้วยภาษา VB.Net


ให้ทำการสร้างฐานข้อมูลภายใต้ SQL Server 2008 และตารางข้อมูล พร้อมทั้งเพิ่มข้อมูลเข้าสู่ตาราง ดังนี้ (เปิดหน้าต่าง New Query ใน SQL Server 2008 แล้วป้อนคำสั่งตามตัวอย่างด้านล่าง)

CREATE DATABASE myDATA
GO

CREATE TABLE tblBankAccount (
          [ACC_NO] [varchar](10) NOT NULL PRIMARY KEY,
          [ACC_NAME] [varchar](50) NULL,
          [AMOUNT] [money])
GO

INSERT INTO tblBankAccount (ACC_NO,ACC_NAME,AMOUNT) 
                               VALUES('111','Kasem',50000)
INSERT INTO tblBankAccount (ACC_NO,ACC_NAME,AMOUNT) 
                               VALUES('222','Mesak',100)

ทำการเขียนโปรแกรมด้วย VB.Net

1. เปิด Visual Studio 20xx จากนั้นคลิกเลือก New Project....
เลือก Visual Basic -> Windows -> Windows Forms Application
ที่ช่อง Name ป้อน  myTransaction
จากนั้นคลิกปุ่ม OK

2. ที่ฟอร์ม ให้เพิ่มคอนโทร Button1 และ DataGridView ตามตัวอย่าง ดังภาพ

















3. ให้ดับเบิลคลิกที่ฟอร์ม หรือ ปุ่ม Button1 แล้วป้อนคำสั่ง ดังนี้

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1
    Dim strConn As String = "Data Source=.\SQLEXPRESS;Initial Catalog=myData;Integrated Security=SSPI;"
    'Data Source เปลี่ยนตามเครื่องที่ติดต่อ
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Button1.Text = "คลิกเพื่อปรับปรุงยอดโอนเงิน"
        Button1.Width = 200
        DisplayData()
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Using objCS = New SqlConnection(strConn)
            objCS.Open()
            'คำสั่งจัดการ Transaction 
            Dim nTR As SqlTransaction
            nTR = objCS.BeginTransaction
            Try
                'ปรับปรุงข้อมูลชุดแรก ภายใต้ทรานแซกชัน nTR
                Dim strSQL1 As String = "UPDATE tblBankAccount SET Amount = Amount - 100 WHERE Acc_no = '111'"
                Dim objSQL1 As New SqlCommand(strSQL1, objCS, nTR)
                objSQL1.ExecuteNonQuery()

                'ปรับปรุงข้อมูลชุดที่สอง ภายใต้ทรานแซกชัน nTR
                Dim strSQL2 As String = "UPDATE tblBankAccount SET Amount = Amount + 100 WHERE Acc_no = '222'"
                Dim objSQL2 As New SqlCommand(strSQL2, objCS, nTR)
                objSQL2.ExecuteNonQuery()

                'เมื่อข้อมูลถูกปรับปรุงทั้งหมดเรียบร้อยแล้วทำการ คอมมิตทรานแซกชัน
                nTR.Commit()
            Catch ex As Exception
                'หากเกิดข้อผิดพลาก ให้ทำการโรลแบ็ก 
                nTR.Rollback()
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK)
            End Try
        End Using
        DisplayData()
    End Sub

    Sub DisplayData()
        ' นำข้อมูลจากตาราง tblBankAccount มาแสดงในกริด
        Using objCS = New SqlConnection(strConn)
            Dim objDS As New DataSet()
            Dim objDA = New SqlDataAdapter()
            objDA.SelectCommand = New SqlCommand("SELECT * FROM tblBankAccount", objCS)
            objDS.Clear()
            objDA.Fill(objDS, "tblBankAccount")
            DataGridView1.DataSource = objDS.Tables(0)
        End Using
    End Sub

End Class


4. จากนั้นกดปุ่ม F5 เพื่อทำการ Run แล้วลองทดสอบ ตามภาพ



















ข้อควรระวัง การใช้ทรานแซกชันระบบฐานข้อมูลจะทำการล็อกตารางที่อยู่ภายใต้ทรานแซกชัน ดังนั้นเวลาใช้ควรทำให้เสร็จในคราวเดียวกัน อย่าเปิดทรานแซกชันค้างไว้ โดยไม่ทำการ commit หรือ rollback

ขอส่งกำลังใจให้กับทหารกล้า ที่ปกป้องประเทศ ทุก ๆ ท่าน

03 กุมภาพันธ์ 2554

VB.Net Google Translator

Google ได้ทำการวิจัยและผลิตผลงานออกมาให้เราใช้งานอย่างมากมาย แถมยังได้สร้าง API สำหรับผลงานที่ผลิตขึ้นมาซึ่งมีมากมาย สำหรับบทความนี้ก็จะยกตัวอย่าง API ของตัวแปลภาษา (Google Translate) ซึ่งใช้แปลภาษาต่าง ๆ  เพื่อให้เราทั้งหลายนำไปเขียนโปรแกรมต่อยอด ซึ่งก็ไม่มีอะไซับซ้อน

Download API ของ Google Translate 
เราต้องเข้าไปทำการดาวน์โหลด API มาเก็บไว้ที่เครื่องเราก่อน ที่เว็บไซต์ http://code.google.com/p/google-api-for-dotnet/downloads/list จะมี API ให้เลือกหลายรุ่น แนะนำให้ download ไฟล์ชื่อ 
GoogleTranslateAPI_0.4_alpha.zip
จากนั้นทำการแตกไฟล์ ออกมาไว้ที่ floder ที่ต้องการ (แล้วจำไว้ด้วยว่าเก็บไว้ที่ไหน)


เขียนโปรแกรมด้วย VB.Net
1. เปิด Visual Studio 20xx จากนั้นคลิกเลือก New Project....
เลือก Visual Basic -> Windows -> Windows Forms Application
ที่ช่อง Name ป้อน  GooPlae  (อ่านว่า กูแปล)
จากนั้นคลิกปุ่ม OK

2. ทำการ Add Reference โดยไปที่เมนู Project -> Add Reference....
ที่หน้าต่าง Add Reference ให้คลิกที่แทป  Browse
แล้วเลือก GoogleTranslateAPI.dll ที่เรา Download  และทำการ Unzipไว้ตอนแรก
(จะเก็บอยู่ภายใต้ Floder ที่เรา Unzip จะอยู่ที่ bin -> DotNet)




















3. ที่ Form1 ให้เพิ่มคอนโทรล ลงในฟอร์ม ดังภาพ

 4. ทำการเขียนคำสั่ง โดย double click ที่ฟอร์ม แล้วป้อนคำสั่งดังนี้


Imports Google.API.Translate
Imports System.Data

Public Class Form1
    Private gooplae1 As New TranslateClient("")
    Private dt As New Data.DataTable("FromCountry")
    Private dt1 As New Data.DataTable("ToCountry")


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        dt.Columns.Add("CountryCode", GetType(System.String))
        dt.Columns.Add("CountryName", GetType(System.String))

        dt.Rows.Add(New Object() {"af", "AFRIKAANS"})
        dt.Rows.Add(New Object() {"sq", "ALBANIAN"})
        dt.Rows.Add(New Object() {"am", "AMHARIC"})
        dt.Rows.Add(New Object() {"ar", "ARABIC"})
        dt.Rows.Add(New Object() {"hy", "ARMENIAN"})
        dt.Rows.Add(New Object() {"az", "AZERBAIJANI"})
        dt.Rows.Add(New Object() {"eu", "BASQUE"})
        dt.Rows.Add(New Object() {"be", "BELARUSIAN"})
        dt.Rows.Add(New Object() {"bn", "BENGALI"})
        dt.Rows.Add(New Object() {"bh", "BIHARI"})
        dt.Rows.Add(New Object() {"br", "BRETON"})
        dt.Rows.Add(New Object() {"bg", "BULGARIAN"})
        dt.Rows.Add(New Object() {"my", "BURMESE"})
        dt.Rows.Add(New Object() {"ca", "CATALAN"})
        dt.Rows.Add(New Object() {"chr", "CHEROKEE"})
        dt.Rows.Add(New Object() {"zh", "CHINESE"})
        dt.Rows.Add(New Object() {"zh-CN", "CHINESE_SIMPLIFIED"})
        dt.Rows.Add(New Object() {"zh-TW", "CHINESE_TRADITIONAL"})
        dt.Rows.Add(New Object() {"co", "CORSICAN"})
        dt.Rows.Add(New Object() {"hr", "CROATIAN"})
        dt.Rows.Add(New Object() {"cs","CZECH"})
        dt.Rows.Add(New Object() {"dv", "DHIVEHI"})
        dt.Rows.Add(New Object() {"nl", "DUTCH"})
        dt.Rows.Add(New Object() {"en", "ENGLISH"})
        dt.Rows.Add(New Object() {"eo", "ESPERANTO"})
        dt.Rows.Add(New Object() {"et", "ESTONIAN"})
        dt.Rows.Add(New Object() {"fo", "FAROESE"})
        dt.Rows.Add(New Object() {"tl", "FILIPINO"})
        dt.Rows.Add(New Object() {"fi", "FINNISH"})
        dt.Rows.Add(New Object() {"fr", "FRENCH"})
        dt.Rows.Add(New Object() {"fy", "FRISIAN"})
        dt.Rows.Add(New Object() {"gl", "GALICIAN"})
        dt.Rows.Add(New Object() {"ka", "GEORGIAN"})
        dt.Rows.Add(New Object() {"de", "GERMAN"})
        dt.Rows.Add(New Object() {"el", "GREEK"})
        dt.Rows.Add(New Object() {"gu", "GUJARATI"})
        dt.Rows.Add(New Object() {"ht", "HAITIAN_CREOLE"})
        dt.Rows.Add(New Object() {"iw", "HEBREW"})
        dt.Rows.Add(New Object() {"hi", "HINDI"})
        dt.Rows.Add(New Object() {"hu", "HUNGARIAN"})
        dt.Rows.Add(New Object() {"is", "ICELANDIC"})
        dt.Rows.Add(New Object() {"id", "INDONESIAN"})
        dt.Rows.Add(New Object() {"iu", "INUKTITUT"})
        dt.Rows.Add(New Object() {"ga", "IRISH"})
        dt.Rows.Add(New Object() {"it", "ITALIAN"})
        dt.Rows.Add(New Object() {"ja", "JAPANESE"})
        dt.Rows.Add(New Object() {"jw", "JAVANESE"})
        dt.Rows.Add(New Object() {"kn", "KANNADA"})
        dt.Rows.Add(New Object() {"kk", "KAZAKH"})
        dt.Rows.Add(New Object() {"km", "KHMER"})
        dt.Rows.Add(New Object() {"ko", "KOREAN"})
        dt.Rows.Add(New Object() {"ku", "KURDISH"})
        dt.Rows.Add(New Object() {"ky", "KYRGYZ"})
        dt.Rows.Add(New Object() {"lo", "LAO"})
        dt.Rows.Add(New Object() {"la", "LATIN"})
        dt.Rows.Add(New Object() {"lv", "LATVIAN"})
        dt.Rows.Add(New Object() {"lt", "LITHUANIAN"})
        dt.Rows.Add(New Object() {"lb", "LUXEMBOURGISH"})
        dt.Rows.Add(New Object() {"mk", "MACEDONIAN"})
        dt.Rows.Add(New Object() {"ms", "MALAY"})
        dt.Rows.Add(New Object() {"ml", "MALAYALAM"})
        dt.Rows.Add(New Object() {"mt", "MALTESE"})
        dt.Rows.Add(New Object() {"mi", "MAORI"})
        dt.Rows.Add(New Object() {"mr", "MARATHI"})
        dt.Rows.Add(New Object() {"mn", "MONGOLIAN"})
        dt.Rows.Add(New Object() {"ne", "NEPALI"})
        dt.Rows.Add(New Object() {"no", "NORWEGIAN"})
        dt.Rows.Add(New Object() {"oc", "OCCITAN"})
        dt.Rows.Add(New Object() {"or", "ORIYA"})
        dt.Rows.Add(New Object() {"ps", "PASHTO"})
        dt.Rows.Add(New Object() {"fa", "PERSIAN"})
        dt.Rows.Add(New Object() {"pl", "POLISH"})
        dt.Rows.Add(New Object() {"pt", "PORTUGUESE"})
        dt.Rows.Add(New Object() {"pt-PT", "PORTUGUESE_PORTUGAL"})
        dt.Rows.Add(New Object() {"pa", "PUNJABI"})
        dt.Rows.Add(New Object() {"qu", "QUECHUA"})
        dt.Rows.Add(New Object() {"ro", "ROMANIAN"})
        dt.Rows.Add(New Object() {"ru", "RUSSIAN"})
        dt.Rows.Add(New Object() {"sa", "SANSKRIT"})
        dt.Rows.Add(New Object() {"gd", "SCOTS_GAELIC"})
        dt.Rows.Add(New Object() {"sr", "SERBIAN"})
        dt.Rows.Add(New Object() {"sd", "SINDHI"})
        dt.Rows.Add(New Object() {"si", "SINHALESE"})
        dt.Rows.Add(New Object() {"sk", "SLOVAK"})
        dt.Rows.Add(New Object() {"sl", "SLOVENIAN"})
        dt.Rows.Add(New Object() {"es", "SPANISH"})
        dt.Rows.Add(New Object() {"su", "SUNDANESE"})
        dt.Rows.Add(New Object() {"sw", "SWAHILI"})
        dt.Rows.Add(New Object() {"sv", "SWEDISH"})
        dt.Rows.Add(New Object() {"syr", "SYRIAC"})
        dt.Rows.Add(New Object() {"tg", "TAJIK"})
        dt.Rows.Add(New Object() {"ta", "TAMIL"})
        dt.Rows.Add(New Object() {"tt", "TATAR"})
        dt.Rows.Add(New Object() {"te", "TELUGU"})
        dt.Rows.Add(New Object() {"th", "THAI"})
        dt.Rows.Add(New Object() {"bo", "TIBETAN"})
        dt.Rows.Add(New Object() {"to", "TONGA"})
        dt.Rows.Add(New Object() {"tr", "TURKISH"})
        dt.Rows.Add(New Object() {"uk", "UKRAINIAN"})
        dt.Rows.Add(New Object() {"ur", "URDU"})
        dt.Rows.Add(New Object() {"uz", "UZBEK"})
        dt.Rows.Add(New Object() {"ug", "UIGHUR"})
        dt.Rows.Add(New Object() {"vi", "VIETNAMESE"})
        dt.Rows.Add(New Object() {"cy", "WELSH"})
        dt.Rows.Add(New Object() {"yi", "YIDDISH"})
        dt.Rows.Add(New Object() {"yo", "YORUBA"})


        With ComboBox1
            .DataSource = dt
            .DisplayMember = "CountryName"
            .ValueMember = "CountryCode"
            .SelectedValue = "en"
        End With

        dt1 = dt.Copy()   ' Copy DataTable

        With ComboBox2
            .DataSource = dt1
            .DisplayMember = "CountryName"
            .ValueMember = "CountryCode"
            .SelectedValue = "th"
        End With

    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text = "" Then
            MessageBox.Show("Please Enter text", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            TextBox1.Focus()
            Return
        End If
        Try
            TextBox2.Text = gooplae1.Translate(TextBox1.Text, ComboBox1.SelectedValue, ComboBox2.SelectedValue)
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub
End Class 
 
5. จากนั้นทำการ run โปรแกรมโดยกดปุ่ม F5 แล้วทดสอบการแปล

























หมายเหตุ ในการแปลของ Google Translate จำเป็นต้องเข้าสู่ระบบอินเตอร์เน็ตก่อนทุกครั้ง

ตรุษจีน รวย รวย วันตรุษจีน มีทุกปี รวย ทุกปี

ชอบบทความ อย่าลืมคลิกโฆษณา


"I Believe in You"

Copyright(c) 2007 - 2022 by Kasem Kamolchaipisit.