วิชวลเบสิกดอทเน็ต (vb.net)
ข้อมูลทั้งหมดเกี่ยวกับวิชวลสตูดิโอดอทเน็ต ได้จากการอ่าน ทดสอบ และใช้เวลาไปมากมายในแต่ละเรื่อง ..
ไม่มีเรื่องใดได้จากการนั่งทางใน .. แม้พยายามนั่งแล้วก็ตาม ..
ถ้าเป็นไปได้ช่วยคัดลอก (Copy) ทุกอย่างที่ผมเขียนไปเผยแพร่ต่อด้วย .. จะได้ลดเวลาในการค้นหา และทดสอบ
สารบัญ
1. 151 Keywords
2. VB Run-Time Library
3. 17 Data Type
4. 16 Data Conversion
5. Toolbox, Win. Control
6. Put&Get in Listbox
7. Sub & Function
8. Data Connection
9. Datagridview
10. VB.net & CSharp
11. Assignment ..

. . . . . . . . . . . . . . . . . .
ตัวอย่างฟอร์มโปรแกรม
+ dgrid1.zip
+ order_northwind.zip
+ Webpage Loader 1.0
ความหมายของ วิชวลเบสิกดอทเน็ต (VB.NET)
วิชวลเบสิกดอทเน็ต (VB.NET) คือ เครื่องมือสำหรับพัฒนาโปรแกรมเป็นภาษาหนึ่งในกลุ่มไมโครซอฟท์วิชวลสตูดิโอดอทเน็ต (Microsoft Visual Studio .NET) เป็นการโปรแกรมที่มีสภาพแวดล้อมแบบกราฟิกสำหรับระบบปฏิบัติการวินโดว์ (Windows Operating System) โดยมีรากฐานภาษามาจากภาษาเบสิก และทำงานบนดอทเน็ตเฟรมเวิร์ค (Dotnet Framework) ถูกออกแบบให้มีความสามารถในการพัฒนาโปรแกรมเชิงวัตถุอย่างแท้จริง และรองรับการออกแบบด้วยยูเอ็มแอล (UML = Unified Modeling Language)
วิชวลสตูดิโอดอทเน็ต (Visual Studio .NET) คือ เครื่องมือสำหรับพัฒนาโปรแกรมแบบครบวงจร เป็นการรวมเครื่องมือที่จำเป็นต่อการพัฒนาโปรแกรมอย่างครบถ้วน (IDE = Integrated Development Environment) ซึ่งรวมบริการการพัฒนาภาษาโปรแกรม บริการคลาสพื้นฐานให้นำมาใช้งานร่วมกันได้อย่างเป็นระบบ เช่น เอสคิวแอลเซิร์ฟเวอร์ (SQL Server) วิชวลเบสิกดอทเน็ต (VB.NET) วิชวลซีชาร์ป (VC#) วิชวลเจชาร์ป (VJ#) วิชวลซีพลัสพลัส (VC++) และเอเอสพีดอทเน็ต (ASP .NET) เป็นต้น โดยทั้งหมดทำงานอยู่บนซีแอลอาร์ (CLR = Common Language Runtime) ที่รองรับการประมวลผลและเข้าใช้ทรัพยากรในเครื่องได้อย่างมีประสิทธิภาพ
ข้อมูลเกี่ยวกับซอฟท์แวร์อย่างเป็นทางการ
+ http://www.microsoft.com/thailand/VisualStudio/
+ http://www.microsoft.com/express/download/default.aspx
ผู้สนับสนุน ยินดีรับ ผู้สนับสนุน เว็บไซต์ด้านการศึกษา
กลุ่มเว็บไซต์นี้ เริ่มพัฒนา พ.ศ.2542
โดยบุคลากรทางการศึกษาด้านคอมพิวเตอร์
โทร. 081-9927223 (ผมเป็นคนลำปางหนา)
ปล. ขอไม่รับ work at home / อาหารเสริม
1.Introduction
1.1 ติดตั้ง Visual Studio 2005zip
1.2 เริ่ม vb.net สร้างปุ่ม Closezip
1.3 start ใน class หรือ modulezip
2.Microsoft Access
2.1 Access97 + Create_Listboxzip
2.2 datagridview+listbox+textzip
2.3 Datagridview + Updatezip
+ Select Flowing in NorthWind TB.
+ Office97 : northwind.mdb (532 KB)
+ MDB Viewer Program 755 KB
3.SQL Server
3.1 Intro SQL Express 2005zip
3.2 odbc+se2005+datagridviewzip
3.3 Insert+sqlexpress+adduserzip
4.MySQL
4.1 datagridview+mysql+odbc
set names 'tis620'
zip
5.Streaming
5.1 Stream + Createzip
6.Data Updating
6.1 Basic to update in Listbox
6.2 update .mdb microsoft.jet.oledb
6.3 update mysql connection/net
6.4 Order Form with northwind
7.Crystal Report
7.1 Form in Crystal Reportzip
7.2 Value:Form to Crystal Reportzip
7.3 Pass 2 var to CrystalReport #1
7.4 Pass 2 var to CrystalReport #2
8.Web Service
8.1 Web Service
9.Non VB.NET
9.1 Basic to ASPX
9.2 MySQL5.1 + EMSzip

ตัวอย่างจอภาพ
+ ตัวเลือก สำหรับสร้างโปรเจคใหม่
โฮมเพจนักศึกษา
+ thaiall512
+ thaiall512setup
+ northwind.mdb (532 KB)
+ dthai97.mdb 70 KB
  tbthai: fid int, fname string, fsalary double
+ boardx.mdb 108 KB
  questions, answers, users ..
+ search.mdb 662 KB
  webdat, describ, group, url

แก้ปัญหาภาษาไทย

Download MySQL Connector
+ Connector/Net
- MySQL Connector/Net 5.1 #
- MySQL Connector/Net 5.0
+ Connector/ODBC
- Connector/ODBC 5.1
- Connector/ODBC 3.51 #

ใช้ aspnet_regiis แล้วอย่าลืมเปิดบริการ

ผลงานนักศึกษา
+ # # # # # # #
    การเพิ่มผู้ใช้ใน SQLExpress 2005 (Peter)
  1. บอกให้ SQLServer ยอมรับวิธีเข้ารหัสของวินโดว์ ?
    DOS>REGEDIT
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
    \Microsoft SQL Server\MSSQL.1\MSSQLServer
    LoginMode = 2 (Old value = 1)
    ถ้าไม่ reboot จะใช้ User ที่สร้างใหม่ Connect ไม่ได้
  2. สร้างตาราง และตัวอย่างข้อมูล เพื่อทดสอบใน windows form
    DOS>sqlcmd -S.\SQLEXPRESS -E
    1> sp_databases
    2> go
    1> create database dbthai
    2> go
    1> use dbthai
    2> go
    1> create table tbthai(id int,name varchar(10))
    2> go
    1> insert into tbthai values(1,'abc')
    2> insert into tbthai values(2,'def')

    3> go
    1> select * from tbthai
    2> go
    1> select * from sys.tables
    2> go
  3. สร้างรหัสผู้ใช้ และรหัสผ่านสำหรับเข้าใช้ระบบ
    DOS>cd C:\Program Files\Microsoft SQL Server\90\Tools\Binn>
    DOS>sqlcmd -S.\SQLEXPRESS -E
    sp_addLogin 'thai', 'thai2007'
    go
    sp_addsrvrolemember 'thai', 'sysadmin'
    go
    sp_password @old = null, @new = '1234', @loginame = 'sa'
    go
    alter login sa enable
    go
    DOS>osql -S .\SQLEXPRESS -E -i data.sql
    osql เป็น sql manager on command line เหมือนกับ sqlcmd
    แต่ sqlcmd จะใช้ฟังก์ชันได้มากกว่า osql
  4. เพิ่มระเบียนใหม่ใน Windows Form ของ VB.NET ?
    คลาสสำคัญที่ต้องเรียกมาใช้
    1) SqlConnection สำหรับเชื่อมฐานข้อมูล
    2) SqlCommand สำหรับส่ง sql เข้าไป
    3) method ExecuteNonQuery() ของ SqlCommand
    Imports system.data.sqlclient
    Dim conn As SqlConnection
    Dim myCommand As SqlCommand
    Dim ra As Integer
    Dim sql As String
    conn = New SqlConnection("server=.\sqlexpress;" + _
    "user id=thai;password=thai2007;database=dbthai")
    conn.Open()
    sql = "insert into tbthai values ("
    sql = sql + TextBox1.Text + ","
    sql = sql + "'" + TextBox2.Text + "')"
    myCommand = New SqlCommand(sql, conn)
    ra = myCommand.ExecuteNonQuery() ' ra = 1
    MessageBox.Show("New Row Inserted " & ra)
    conn.Close()
  5. แสดงข้อมูลจาก SQLServer ใน messagebox
    คลาสสำคัญที่ต้องเรียกมาใช้
    1) SqlConnection สำหรับเชื่อมฐานข้อมูล
    2) SqlCommand สำหรับส่ง sql เข้าไป
    3) SqlDataReader สำหรับประมวลผลเพื่ออ่านระเบียน
    4) method.read() ของ SqlDataReader
    Imports system.data.sqlclient
    Dim conn As SqlConnection
    Dim myCommand As SqlCommand
    Dim s As String = ""
    conn = New SqlConnection("server=.\sqlexpress;" + _
    "user id=thai;password=thai2007;database=dbthai")
    conn.Open()
    myCommand = New SqlCommand("select * from tbthai", conn)
    Dim reader As SqlDataReader = myCommand.ExecuteReader()
    While reader.Read()
    s &= reader(1) & Chr(10) 'only name
    End While
    MessageBox.Show(s)
    conn.Close()

    แนะนำเว็บ (Web Guides) MySQL
    + ใช้ MySQL ในสภาพแวดล้อม .NET 3 วิธี (ODBC, Native Provider และ OLEDB.NET)
    + การใช้ MySQL ด้วย Visual Studio (ละเอียดดี)
    + Configuring a Connector/ODBC DSN on Windows
    + .NET Data Providers
    + Types of .NET Framework Data Provider Lesson
    + vbnet + mysql
    + e-book หลายภาษา หลากหลาย
    + e-book 8 บท ดีมาก
    + คำสั่งใน SQLCMD จาก MSDN
    + SQLCMD : SQL Command Line
    + SQLCMD บทที่ 1
    + http://www.a1vbcode.com
    + http://msdn2.microsoft.com/en-us/vstudio (official)
    + http://www.developerfusion.co.uk/vbnet/
    + เปิดสอน VB2005
    + สอน Visual Basic .net
    + สอน .net โดย ไพรัช เพลินมาลัย
    + http://www.codeproject.com
    - http://www.codeproject.com/aspnet/fileupload.asp
    + VB.Net Black (password: ganelon)
    + VB.Net Book 13 Chapters
    + หลักสูตร Crystal Report Version 11 โดย พงษ์พันธ์ ศิวิลัย
    * Check List เตรียมสมัครงาน

ตัวอย่างแอพพลิเคชันขนาดเล็กมาก ที่ถูกพัฒนาจาก Visual Studio .Net
หากประมวลผลไม่ได้ แสดงว่าไม่ได้ติดตั้ง Dotnet Framework : #1 express 2005 for developer หรือ #2 dotnetfx.exe for execute

1 .exe

2 .exe

3 .exe

4 .exe

5 .exe

6 .exe

7 .exe

8 .exe

9 .exe

แหล่งอ้างอิง (Reference)
From : http://www.programmersheaven.com/2/VB-NET-School
1. Welcome to the VB.NET School 
2. Introduction to the .NET Framework & VB.NET 
3. VB.NET Language Fundamentals 
4. Classes & Objects 
5. Inheritance & Polymorphism in VB.NET 
6. Structures, Enumeration, Garbage Collection & Nested Classes 
7. Abstract Classes & Interfaces 
8. Arrays, Collections & String Manipulation 
9. Exception Handling in VB.NET 
10. Delegates & Events 
11. WinForms & Windows Applications 
12. More Windows Controls and Standard Dialog Boxes 
13. Data Access in .NET using ADO.NET 
14. Multithreading in VB.NET 
15. File System & Streams 
From : startvbdotnet.com
+ .NET Defined
+ OOP with VB
+ VB Language
+ Win Forms
+ Windows Controls
+ ADO .NET
+ User Controls
+ File Handling
+ Multithreading
+ Deployment
+ XML Web Services 
+ Essential XML
+ Resources
+ Discussions
+ ASP.NET
From : http://msdn2.microsoft.com/en-us/vbrun/ms788235.aspx (PDF e-Book)
1: Microsoft .NET Framework Primer for the Visual Basic Developer
2: Language Enhancements for Visual Basic 2005
3: Visual Studio 2005 Integrated Development Environment
4: Building Datacentric Applications
5: Constructing User Interfaces
6: Building Web Applications
7: Microsoft .NET Framework Enhancements
8: Deploying Applications

http://msdn2.microsoft.com/en-us/library/4c26cc39(vs.80).aspx Visual Studio Hardware Requirements - Processor : 600 MHz - Ram : 192 MB (ถ้าไม่มีปัญหาควร 1 GB) - HD : 1 GB to 4 GB - OS :
Windows 2000 Service Pack 4, Windows XP Service Pack 2,
Windows Server 2003 Service Pack 1, or Windows Vista3

+ http://www.startvbdotnet.com/ado/default.aspx
ตัวอย่างรหัสต้นฉบับอย่างสั้น (Short Source Code)
  1. สร้าง console application หรือเปลี่ยนใน Application type ก็ได้ แล้วสร้าง module ?
      Module Module1 Public a As Integer = 5 Sub main() Dim b As Integer b = a + 1 Console.WriteLine(b) a = Val(Console.ReadLine()) b = a + 5 For a = b To 10 : Console.WriteLine(a) : Next If a = 1 Then Console.Write(5) Console.ReadLine() End Sub End Module
  2. สร้าง Module ที่มี sub main จะแสดงชื่อ module ให้เลือกใน Startup Object
      Module Module1 Sub main() MsgBox(5) End Sub End Module
  3. ใน form1 สามารถสร้างและเรียกใช้ method ของตนได้
      Public Class Form1 Sub m() MsgBox(6) End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call m() End Sub End Class
  4. ถ้าสร้าง method ใน class แบบ shared จะเรียกใน form ได้ ถ้า imports
      Public Class Class1 Shared Sub m() MsgBox(6) End Sub End Class Imports WindowsApplication1.Class1 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call m() End Sub End Class
  5. ใช้แต่ method สร้าง form และ control ใน runtime
    All these Windows Controls are based on the Control class, the base class for all controls.
    Visual Basic allows us to work with controls in two ways: at design time and at runtime. ?
    The Control class is in the System.Windows.Forms namespace.
    เลือก enable application framework ใน WindowsApplication Properties แล้วเลือก Sub Main
      Module Module1 Sub main() Dim instance As New Form Dim cm As New Button cm.Text = "abc" instance.Size = New Size(300, 200) instance.Controls.Add(cm) instance.ShowDialog() End Sub End Module
  6. ใช้แต่ method สร้าง form และ control และ event
      Module Module1 Sub main() Dim instance As New Form Dim lb As New ListBox Dim cm As New Button AddHandler cm.Click, AddressOf cmEventHandler cm.Text = "abc" lb.Items.Add("ทดสอบ") lb.Items.Add("ไทยออล") lb.Left = 100 ' pixels AddHandler lb.Click, AddressOf lbEventHandler instance.Size = New Size(300, 200) instance.Controls.Add(cm) instance.Controls.Add(lb) instance.ShowDialog() End Sub Public Sub cmEventHandler(ByVal sender As Object, ByVal e As System.EventArgs) MsgBox(sender.text.ToString) End Sub Public Sub lbEventHandler(ByVal sender As Object, ByVal e As System.EventArgs) Dim s As ListBox = sender MsgBox(s.Items(s.SelectedIndex.ToString)) ' MsgBox(sender.items(1)) ' ไทยออล End Sub End Module
  7. เปิด web browser ในตัว
    เขียนใน Windows Application แต่แก้ Properties ของ Windowsapplication ใน Startup Object เป็น Module1
      Module Module1 Sub main() Dim instance As New Form Dim wb As New WebBrowser wb.Navigate(New Uri("http://www.thaiall.com")) instance.Size = New Size(600, 500) wb.Width = instance.Size.Width.ToString wb.Height = instance.Size.Height.ToString instance.Controls.Add(wb) instance.ShowDialog() End Sub End Module
  8. ฟังก์ชัน อาร์เรย์ และวันที่ (Random & Array & Date)
      Dim v1 As Integer = CInt(Rnd() * 100) Dim v2 As Double = Rnd() Dim v3() As Integer = {5, 6} MsgBox(v1 & "-" & v2 & "-" & v3(0) & "-" & v3.Length) Dim v4 As Date v4 = Now '11/13/2007 8:29:50 PM v4 = #11/13/2007# MsgBox(TimeOfDay & " " & v4) ' 8:29:50 PM 11/13/2007 Dim v5(2) As Integer v5(0) = 7 : v5(1) = 8 : MsgBox(v5(0) + v5(1)) ' 15 Dim v6 As Integer v6 = DateDiff(DateInterval.Day, #10/13/2006#, v4) ' 396 MsgBox(v6) Dim v7 As String = "abcdef" MsgBox(Mid(v7, 1, 2) & Microsoft.VisualBasic.Left(v7, 2)) Dim v8() As String v8 = Split("a+b+c", "+") MsgBox(v8(0) & chr(10) & v8(1)) ' chr(65)=A & Asc("A")=65 & Format(Asc("A"), "000")=065
  9. การสุ่มแบบไม่ซ้ำ (Random & No duplicate)
      Randomize() Dim a(5) As Integer, i, j As Integer, s As String = "", found As Boolean For i = 0 To 5
      found = False
      Dim t As Integer = CInt(Rnd() * 10)
      For j = 0 To i - 1
      If a(j) = t Then found = True
      Next
      If (found) Then i -= 1 Else a(j) = t : s &= t & Chr(10) Next MsgBox(s)
  10. consoleapplication + byval + byref + sub + function (stop with breakpoint + ต.ย.ข้อสอบ)
      Module Module1
      Dim a As Integer
      Sub Main()
      Dim a As Integer = 5
      sub1(a, a)
      Console.WriteLine(func1(a, a)) ' 25
      End Sub
      Sub sub1(ByVal x As Integer, ByRef y As Integer)
      a += x : x += a : y += a
      End Sub
      Function func1(ByVal x As Integer, ByRef y As Integer) As Integer
      func1 = a + x + y
      End Function End Module
  11. Timer + Nanosecond + Progressbar
      Public Class Form1 ' The value of this property represents the number of 100-nanosecond intervals ' that have elapsed since 12:00:00 midnight, January 1, 0001. Dim start As Long Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load start = Now.Ticks Timer1.Interval = 250 'milliseconds Timer1.Start() End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click MsgBox("Nano Second = " & (Now.Ticks - start)) End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Timer1.Tick If (ProgressBar1.Value = 100) Then ProgressBar1.Value = 0 ProgressBar1.Value += 1 Button1.Text = ProgressBar1.Value End Sub End Class
  12. โปรแกรมนี้ error เกี่ยวกับความเข้ากันได้ของคำสั่ง
    - ทำไม error ว่า Keyword not supported: 'provider'. ตอนส่งค่าให้ ConnectionString
    1. เพราะ provider=microsoft.jet.oledb.4.0 ใช้กับ SqlConnection ไม่ได้
    2. ถ้าใช้ SqlConnection ต้องเชื่อมต่อกับ SQLServer ที่กำหนด server, user, password, db
      Public Class Class1 Public Shared data As String = _ "provider=microsoft.jet.oledb.4.0;data source=c:\northwind.mdb" End Class
      Imports system.data.sqlclient Public Class Form1 Dim conn As SqlConnection Dim com As SqlCommand Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Dim strconn As String = Class1.data conn = New SqlConnection() With conn If .State = ConnectionState.Open Then .Close() .ConnectionString = strconn ' Keyword not supported: 'provider' .Open() End With End Sub End Class
  13. จับเวลาการประมวลผล 10 ล้านรอบใน for ' my computer use about 62.5 Millisecond Module Module1 Dim i, j, startclock, stopclock As Long Sub Main() display_time(startclock) For i = 1 To 10000000 : j += i : Next display_time(stopclock) Console.WriteLine(stopclock - startclock) Console.ReadLine() End Sub Sub display_time(ByRef x As Long) x = Now.Ticks Console.WriteLine(Now.Millisecond & " millisecond " & Now.Ticks & " ticks") End Sub End Module
  14. ASP Short Code
      <body bgcolor=yellow> <form id="fm" runat="server"> <asp:TextBox ID="TextBox1" runat="server" Text="0"> </form> <% response.write(textbox1.text) %> <% Session("x") = TextBox1.Text %> </body> ' คำสั่งสำหรับปุ่มใน .vb เพื่อเปิดฟอร์มใหม่ Server.Transfer("default2.aspx", True) ' Session เป็นอีกวิธีหนึ่งที่ใช้ส่งค่าระหว่างฟอร์ม ' Response.Redirect("default.aspx?a=6") เป็นการส่งผ่าน request.querystring อีกวิธีหนึ่ง
  15. to call command in shell
      Shell("notepad.exe", AppWinStyle.NormalFocus) Shell("c:\x.bat", AppWinStyle.NormalFocus)
  16. to start & close process
      Dim p As New Process() Private Sub b1() p = Process.Start("C:\Windows\system32\calc.exe") End Sub Private Sub b2() p.CloseMainWindow() p.Close() End Sub
  17. SQL ที่น่ารู้สำหรับ Crystal Report มาก 1. select * from [order details] 2. select * from orders where orderdate = #11/16/1994# 3. select * from orders where customerid like "*A*" 4. select * from orders where employeeid > {?t1} 5. select * from orders where orderdate = {?t1} ' CDate(TextBox1.Text) 6. select orders.*,[order details].* from (
    [order details] inner join orders
    on [order details].orderid = orders.orderid
    ) where [order details].productid={?t1} and orders.employeeid = {?t2} Imports Crystaldecisions.shared ?
    Dim rpt As String
    rpt = "C:\CrystalReport1.rpt"
    CrystalReportViewer1.ReportSource = rpt
  18. การ ping และ download แฟ้มจากอินเทอร์เน็ต
    If My.Computer.Network.Ping("www.google.com", 1000) Then
    MsgBox("Server pinged successfully.")
    Else
    MsgBox("Ping request timed out.")
    End If
    My.Computer.Network.DownloadFile("http://www.thaiall.com/ta1.gif", "C:\ta1.gif")
    My.Computer.Network.UploadFile( _
    "C:\ta1.gif", "http://www.yourhost.com/upload.aspx", "anonymous", "")
    ' Format(1, "000")=001
    If My.Computer.FileSystem.FileExists("c://x.txt") Then
    My.Computer.FileSystem.DeleteFile("c://x.txt")
    My.Computer.Network.DownloadFile("http://www.thaiall.com", "C:\x.txt")
    msgbox(My.Computer.FileSystem.ReadAllText("c://x.txt"))
    Else
    My.Computer.Network.DownloadFile("http://www.thaiall.com", "C:\x.txt")
    End If
  19. ตัวอย่าง Visual C# เมื่อประมวลผลใน Console
    - Compile ผ่าน Command Line หรือ Editplus ก็ได้
    - กำหนด Command ใน Editplus เป็น "c:\windows\system32\cmd.exe" "/k"
    - ตัวอย่างการแปล C:\WINDOWS.0\Microsoft.NET\Framework\v2.0.50727>csc hello.cs public class HelloWorld { public static void Main(string[] args) { string name = "hello"; System.Console.WriteLine(name); } }
  20. ตัวอย่าง Visual C# เมื่อเขียนใน Visual Studio using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.Write("x"); Console.Read(); } } }
  21. ตัวอย่าง Visual J# เมื่อประมวลผลใน Console
    - Compile ผ่าน Command Line หรือ Editplus ก็ได้
    - กำหนด Command ใน Editplus เป็น "c:\windows\system32\cmd.exe" "/k"
    - ตัวอย่างการแปล C:\WINDOWS.0\Microsoft.NET\Framework\v2.0.50727>vjc x.jsl public class x { public static void main(String[] args) { System.out.println(5); } }
  22. ตัวอย่าง Visual C++ ใน Windows 32 Console Application #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { printf("a"); char s[80]; scanf("%s",&s); printf(s); char c; scanf("%c",&c); return 0; }
  23. ตัวอย่าง Visual C++ ใน CLR 32 Console Application #include "stdafx.h" using namespace System; int main(array<System::String ^> ^args) { Console::WriteLine(L"Hello World"); Console::Read(); return 0; }
  24. ตัวอย่าง class ใน .net แทน printer object ที่เคยมีใน vb6 'Dim Print As New Class1 'Print.prt("About Visual Basic 1" & vbCrLf & "About Visual Basic 2") 'http://visualbasic.about.com/od/usingvbnet/a/printvb2005.htm Public Class Class1 Friend tx As String Public Sub prt(ByVal text As String) tx = text Dim prn As New Printing.PrintDocument Using (prn) ' prn.PrinterSettings.PrinterName = "PrinterName" AddHandler prn.PrintPage, AddressOf Me.PrintPageHandler prn.Print() RemoveHandler prn.PrintPage, AddressOf Me.PrintPageHandler End Using End Sub Private Sub PrintPageHandler(ByVal sender As Object,ByVal args As Printing.PrintPageEventArgs) Dim myFont As New Font("Microsoft San Serif", 10) args.Graphics.DrawString(tx, New Font(myFont, FontStyle.Regular), Brushes.Black, 50, 50) End Sub End Class
  25. ลูกศิษย์ที่ชื่อวศิลป์ ถามว่า ถ้า form เรียก class มา แล้วต้องการให้ใน class สั่งปิดการทำงานของปุ่มจะทำได้ไหม
    ผมจึงใช้ VS2005 สร้าง form1 และ class1.vb โดยเขียน code ทดสอบกับ button1 ที่สร้างผ่าน design time อย่างง่ายดังนี้ ' class1.vb Public Class Class1 Shared Sub hidebutton(ByRef o as System.Object) o.text ="a" o.enabled = false End Sub End Class ' form1.vb Imports WindowsApplication1.Class1 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click call hidebutton(Button1) End Sub End Class
  26. การควบคุม control ทั้งหมดในฟอร์มผ่านคลาสที่ import เข้าไป ถ้า form1 ทำงานปกติมี button และ textbox และ import คลาสจาก application อย่างถูกต้อง โดยเรียกใช้คลาสด้วยการส่งฟอร์มให้กับคลาสทำการควบคุม ซึ่งคุมได้ทุกวัตถุดังนี้ Public Class Class1 Shared Sub hidebutton(ByRef o As System.Object) o.text = o.name ' same result is form1 Dim s As String = "" For Each c As Control In o.controls c.Enabled = False If TypeOf c Is TextBox Then c.Enabled = True s += c.Name + vbLf Next MsgBox(s) End Sub End Class
    วิชวลเบสิกดอทเน็ต
    วิชวลเบสิกดอทเน็ต คือการโปรแกรมที่มีสภาพแวดล้อมแบบกราฟิกสำหรับระบบปฏิบัติการวินโดว์ โดยมีโครงสร้างภาษาแบบภาษาเบสิก และทำงานบนดอทเน็ตเฟรมเวิร์ค ถูกพัฒนาให้เป็นการโปรแกรมเชิงวัตถุอย่างแท้จริง รองรับการออกแบบด้วยยูเอ็มแอล
    ความหมายของการโปรแกรมเชิงวัตถุ (Object-Oriented Programming)
    OOP เป็นเรื่องของวัตถุ (Object) ความหมายวัตถุ คือ “หน่วยหนึ่งของโปรแกรม ซึ่งมีหน้าที่การทำงานเฉพาะเจาะจง และถูกกำหนดปฏิสัมพันธ์กับโปรแกรมหน่วยอื่นอย่างแน่ชัด”
    นักเขียนโปรแกรม VB6 บางคนพบว่าตนไม่สามารถเขียนโปรแกรมใน VB.NET ได้ดีนัก เพราะพบแนวคิดที่แตกต่างจาก VB6 ไปมากจนไม่อาจปรับวิธีทำงานให้เข้ากับ VB.NET ได้ สาเหตุที่เป็นเช่นนั้นเพราะ VB6 เป็น Object based programming (การเขียนโปรแกรมที่มีพื้นฐานจากวัตถุ) ส่วน VB.NET เป็นภาษา OOP โดยสมบูรณ์ มิได้เป็นเพียง VB6 เวอร์ชันใหม่ ขณะที่นักเขียนโปรแกรมที่เคยเขียนภาษา C++ และหรือภาษาจาวา (Java Language) มาแล้วจะสามารถเรียนรู้ภาษา C# ได้อย่างรวดเร็ว เพราะมีพื้นฐานเกี่ยวกับ OOP มาก่อน
    ใน VB6 มี object อยู่จำนวนหนึ่งเรียกว่า Control (เช่นปุ่มและ Label) มันมี property method และ event ครบถ้วนเหมือน object ใน OOP แต่เราไม่สามารถนำมันมา “สืบสันดาน” (inheritance) หรือนำมาสร้างเป็น object ใหม่ โดยเพิ่มเติมแก้ไขคุณสมบัติของมันได้ง่ายเหมือนที่ทำได้ในภาษา .NET การไม่มีคุณสมบัติ inheritance เป็นเครื่องชี้ว่าภาษา VB6 ไม่ใช่ภาษา OOP
    ข้อมูลจาก http://www.meelink.com/webboard/data/3/0011-1.html
OOP in VB.NET
Public Class Form1
  Private Sub Form1_Load( ...
    Dim obj As New Test()
    obj.disp() ' hello
    Dim b As New child()
    MsgBox(b.sum() & b.add()) ' 13030
  End Sub
End Class
Public Class Test
  Sub disp()
    MsgBox("hello")
  End Sub
End Class
Public Class child
  Inherits father
  Private k As Integer = 100
  Public Function sum() As Integer
      Return i + j + k
  End Function
End Class
Public Class father
  Protected i As Integer = 10
  Protected j As Integer = 20
  Public Function add() As Integer
    Return i + j
  End Function
End Class
    OOP Sample Code ' Class and Object Imports System.Console Module Module1 Sub Main() Dim obj As New Test() obj.disp() Read() End Sub End Module Public Class Test Sub disp() Write("Object testing") End Sub End Class
    ' Constructor ' work to initialize the objects Imports System.Console Module Module1 Sub Main() Dim obj As New Test(5) Write(obj.dispx()) ' output = 7 Read() End Sub End Module Public Class Test Public x As Integer Public Sub New() x = 1 End Sub Public Sub New(ByVal value As Integer) x = value + 2 End Sub Function dispx() As Integer Return x End Function End Class
    ' Inheritance ' Reusing the class that is tested, debugged and used many times Imports System.Console Module Module1 Sub Main() Dim burin As New child() WriteLine(burin.sum()) ' 130 WriteLine(burin.add()) ' 30 Read() End Sub End Module Public Class child Inherits father Private k As Integer = 100 Public Function sum() As Integer Return i + j + k End Function End Class Public Class father Protected i As Integer = 10 Protected j As Integer = 20 Public Function add() As Integer Return i + j End Function End Class
    ' Polymorphism ' one name, multiple forms Imports System.Console Module Module1 Sub Main() Dim lampang As New child() WriteLine(lampang.dsp(10)) WriteLine(lampang.dsp("ten")) Read() End Sub End Module Public Class child Public Function dsp(ByVal i As Integer) As Integer Return i End Function Public Function dsp(ByVal i As String) As Integer Return 10 End Function End Class
    ' Interface ' allow us to create definitions for component interaction Imports System.Console Module Module1 Sub Main() Dim obj As New child() obj.disp() Write(obj.mul()) Read() End Sub End Module Public Interface myobj Sub disp() Function mul() As Double End Interface Public Class child Implements myobj Public i As Double = 12 Sub disp() Implements myobj.disp WriteLine(i) End Sub Public Function mul() As Double Implements myobj.mul Return i * i End Function End Class
    ' Abstract ' designed to act as a base class Imports System.Console Module Module1 Public MustInherit Class aburin Public i As Integer = 10 Public MustOverride Function Add() As Integer Sub dsp() Write(5) End Sub End Class Public Class burin Inherits aburin Shadows i As Integer = 20 Public Overrides Function Add() As Integer Return i + i End Function End Class Sub Main() Dim abs As New burin() WriteLine("one is " & abs.i) WriteLine(abs.Add()) abs.dsp() Read() End Sub End Module
    ' Structure ' defined for handling a group of logically related data items Imports System.Console Module Module1 Structure Employee Dim firstname As String Dim lastname As String End Structure Sub Main() Dim person As New Employee() person.firstname = "burin" person.lastname = "rujjanapan" Write(person.firstname + " " + person.lastname) Read() End Sub End Module
    คำถาม - คำตอบ (Question & Answer)
  1. ความแตกต่างของ C# กัย VB.NET ?
    ต่างกันทุกส่วนตั้งแต่ program structure, data types, constants, operators, choices, loops, arrays, functions, strings, exception handling, namespaces, classes and using objects เป็นต้น
  2. รายชื่อโปรแกรมที่เคยถูกเปิดด้วย Visual Studio .net ลบออกได้อย่างไร
    ใช้ Regedit เข้าไปที่ HKCR\Software\Microsoft\VisualStudio\8.0\ProjectMRUList
  3. ถ้าแก้ Regedit ในส่วน LoginMode=2 และสร้าง user จะ connect ทันทีไม่ได้
    จะใช้ conn = New SqlConnection("server=.\sqlexpress;user id=thai;password=thai2007;database=dbthai") ไม่ได้
    ต้อง reboot เครื่องก่อน เพราะปัญหานี้ผมพบในเครื่องที่ติด deepfreeze
  4. แหล่งเก็บข้อมูลของ SQL Server คือโฟรเดอร์ใด
    อยู่ใน C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\
  5. ต.ย.ผลการสร้างฐานข้อมูลชื่อ dbthaiall ใน SQLExpress คล้ายกับ dbthai.mdb มี 2 ระเบียน
    เก็บข้อมูลใน C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\
    โดย dbthaiall.mdf มีขนาด 2,293,760 bytes และ dbthaiall_log.LDF มีขนาด 516,096 bytes
    ถ้าไม่มีแฟ้ม dbthaiall_log.LDF ระบบจะสร้างขึ้นอัตโนมัติ
    ผมมี dbthaiall.zip 126 KB ให้นำไปทดสอบ
  6. แหล่งเก็บข้อมูลของ MySQL Server อยู่ในโฟรเดอร์ใด
    เช่น โฟรเดอร์ C:\thaiabc\mysql\data\dbthai
  7. เปิด MSDN แล้วพบว่า ms-help://MS.MSDNQTR.v80.en invalid
    อาจมีวิธีแก้ไขหลายวิธี แต่ที่ผมทดสอบแล้วได้ผลมีขั้นตอนสั้น ๆ ดังนี้
    1. ไปที่ C:\Program Files\Common Files\Microsoft Shared\Help 8\Microsoft Document Explorer 2005
    2. สั่ง install.exe แล้วเลือก Repair แล้วทำไปจนจบ
    3. หลัง Reboot เครื่อง ผมใช้ MSDN ได้ตามปกติครับ
  8. ลงทะเบียน ASP.NET เข้ากับ IIS ผ่าน DOS Prompt

    1. ติดตั้ง IIS ใน Application Server
    2. C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727> aspnet_regiis.exe -i
    ความหมายของสิ่งที่น่าสนใจ และตัวอย่างคำสั่ง
  1. โอดีบีซี (ODBC)
    โอดีบีซี (ODBC = Open Database Connectivity) คือ ส่วนต่อประสานระหว่าง ภาษาโปรแกรม (Program Language) กับ ตัวขับฐานข้อมูล เป็นบริการที่แยกอิสระจาก ภาษาโปรแกรม โปรแกรมประยุกต์ ระบบฐานข้อมูล และระบบปฏิบัติการ ส่วนต่อประสานนี้รองรับข้อคำถามเอสคิวแอล (SQL) เพื่อเข้าถึงและจัดการข้อมูล ผ่านอินเทอร์พรีเตอร์ (Interpreter) ระหว่าง โปรแกรมประยุกต์ กับ ตัวขับฐานข้อมูล ทำให้ผู้พัฒนาโปรแกรมได้สะดวก โดยไม่ต้องยึดติดวิธีการ หรือลักษณะจำเพาะของตัวขับฐานข้อมูลที่เลือกใช้
  2. ดีเอสเอ็นในโอดีบีซี (DSN in ODBC) ?
    ดีเอสเอ็น (DSN = Data Source Name) คือ ชื่อแหล่งข้อมูลที่ถูกสร้างผ่านโอดีบีซี เพื่อใช้อ้างอิงการเชื่อมประสานกับตัวขับฐานข้อมูล และระบบฐานข้อมูล ถ้าในโอดีบีซีไม่มีตัวขับฐานข้อมูลที่ต้องการใช้ก็สามารถติดตั้งตัวขับโอดีบีซีเพิ่มเติมได้ การสร้างดีเอสเอ็นให้ภาษาโปรแกรมเรียกใช้มี 3 แบบ คือ แบบเฉพาะผู้ใช้ (User DSN) แบบผู้ใช้ทุกคนในเครื่อง (System DSN) และ แบบอ้างอิงจากแฟ้ม (File DSN)
    ตัวอย่างโปรแกรมที่ใช้โอดีบีซี (ODBC Sample)
    ' Imports System.Data.Odbc
    Dim ConnString As String = "Dsn=modbc351mysql;Uid=admin;Pwd=p"
    Dim sql As String = "select user,password from user"
    Dim oConn As OdbcConnection = New Odbc.OdbcConnection(ConnString)
    ' Dim strthai as String = "SET NAMES 'tis620'" 
    ' Dim cmdCat as New OdbcCommand(strthai,oConn)
    ' oConn.Open()
    ' cmdCat.ExecuteNonQuery()
    Dim CmdCat As OdbcCommand = New OdbcCommand(sql, oConn)
    oConn.Open()
    Dim ReaderCat As OdbcDataReader = CmdCat.ExecuteReader()
    Dim s As String = ""
    Do While ReaderCat.Read() : s &= ">" & ReaderCat.GetString(0) & Chr(10) : Loop
    MsgBox(s)
    ReaderCat.Close()
    oConn.Close()
  3. เอดีโอ (ADO) ?
    เอดีโอ (ADO = ActiveX Data Objects) คือ ชุดส่วนประกอบวัตถุ (Component Object Model) มีหน้าที่เป็นอินเตอร์เฟซโปรแกรมประยุกต์ (API = Application Program Interface) สำหรับการเชื่อมโยงแหล่งข้อมูล (OLEDB = Object Linking and Embedding Database) กับภาษาโปรแกรม (Program Language) เพื่อให้ผู้พัฒนาเชื่อมต่อข้อมูลโดยตรง และไม่จำเป็นต้องรู้ว่าฐานข้อมูลเก็บในรูปแบบใด ผู้พัฒนาสามารถเลือกใช้งานเอดีโอ (ADO) แทนโอดีบีซี (ODBC) สำหรับเข้าถึงระบบฐานข้อมูลได้ การเข้าถึงข้อมูลด้วยเอดีโอ มี 2 แบบ คือ ดาต้าเซท (DataSet) และดาต้าโพไวเดอร์ (Data Provider)
    การทำงานของดาต้าเซท คือ คัดลอกข้อมูลเข้าสู่หน่วยความจำและตัดการเชื่อมต่อ สามารถปรับปรุงแก้ไขมูลในหน่วยความจำเสมือนแก้ในฐานข้อมูล เมื่อแก้ไขแล้วสามารถส่งข้อมูลจากหน่วยความจำไปแทนข้อมูลในฐานข้อมูล
    การทำงานของดาต้าโพไวเดอร์ คือ ให้บริการเชื่อมต่อ และบริการกิจกรรมจากการเชื่อมต่อ ซึ่งใช้บริการได้ 2 แบบ คือ เอสคิวแอลดาตาโพไวเดอร์ (SQL Data Provider) สำหรับเอสคิวแอลเซอร์ฟเวอร์ 7.0 (Microsoft's SQL Server 7.0) หรือสูงกว่าโดยเฉพาะ ส่วนโอแอลอีดีบีดาต้าโพไวเดอร์ (OleDb DataProvider) สำหรับเชื่อมต่อฐานข้อมูลแบบอื่น เช่น Access, MySQL หรือ Oracle ซึ่งมีคลาสให้ใช้ 4 ระดับ ดังนี้ 1)Connection Object 2)Command Object 3)DataReader Object 4)DataAdapter Object
    ตัวอย่าง Data Provider แบบ SQL Data Provider ใช้คลาส 2 ระดับ 
    
    ' Imports system.data.sqlclient
    Dim conn As SqlConnection
    Dim myCommand As SqlCommand
    conn = New SqlConnection("server=.\sqlexpress;user id=x;password=y;database=z")
    conn.Open()
    Dim sql As String = "insert into t1 values (1,'aaa')"
    myCommand = New SqlCommand(sql, conn)
    Dim ra As Integer = myCommand.ExecuteNonQuery() ' ra = 1
    MessageBox.Show("New Row Inserted " & ra)
    conn.Close()

    ตัวอย่าง Data Provider แบบ SQL Data Provider ใช้คลาส 3 ระดับ
    ' Imports system.data.sqlclient
    Dim conn As SqlConnection
    Dim myCommand As SqlCommand
    Dim s As String = ""
    conn = New SqlConnection("server=.\sqlexpress;user id=x;password=y;database=z")
    conn.Open()
    myCommand = New SqlCommand("select * from tbthai", conn)
    Dim reader As SqlDataReader = myCommand.ExecuteReader()
    While reader.Read()
    s &= reader(1) & Chr(10) 'only name
    End While
    MessageBox.Show(s)
    conn.Close()

    ตัวอย่าง Data Provider แบบ OleDB Data Provider ใช้คลาส 3 ระดับ
    ' Imports system.data.oledb
    Dim strconn As String = "provider=microsoft.jet.oledb.4.0;data source=c:\dthai97.mdb"
    Dim cn As New OleDbConnection(strconn)
    Dim strsql As String = "select * from tbthai"
    Dim cm As New OleDbCommand(strsql, cn)
    cn.Open()
    Dim dr As OleDbDataReader = cm.ExecuteReader()
    Dim s As String = ""
    While dr.Read()
    s &= dr.Item(0) & "," & dr.Item(1) & "," & dr.Item(2) & Chr(10)
    End While
    msgbox(s)
    cn.Close()

    ตัวอย่าง Data Set และ OleDB Data Provider ใช้คลาส 3 ระดับ ' Imports System.Data.OleDb ' Dim da As New OleDbDataAdapter ' Dim ds As New DataSet Dim strconn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/dthai97.mdb" Dim cn As New OleDbConnection(strconn) da.SelectCommand = New OleDbCommand("select * from tbthai", cn) da.Fill(ds, "tb") DataGridView1.DataSource = ds.Tables("tb")
    Dim cb As New OleDbCommandBuilder(da) Try Dim chg As Integer = da.Update(ds, "tb") MsgBox(chg) 'MsgBox(DataGridView1.Rows.Count()) Catch ex As Exception MsgBox(ex.Message) End Try
เคยพบปัญหาว่า สั่ง Start debugging หรือทดสอบโปรแกรมแล้ว ไม่ประมวลผล แต่พบ error message ว่า พบข้อผิดพลาดขณะประมวลผลโปรเจค แก้ไขโดยเข้าไปใน properties ของ project แล้วเลือก Enable the Visual Studio hosting process ก็จะสั่ง debug ได้ตามปรกติ
เข้า DOS mode เพื่อเขียนโปรแกรม Visual C แล้วสั่ง Compile และ Execute โดยไม่ต้องผ่าน IDE DOS Mode
echo Module Module1 > y.vb
echo Sub main() >> y.vb
echo Console.WriteLine(5) >> y.vb
echo End Sub : End Module >> y.vb
vbc y.vb
y
พบว่าในห้องปฏิบัติการ มีเครื่องคอมพิวเตอร์บางเครื่องสร้าง project ไว้ใน directory ทันทีที่ create project แต่บางเครื่องจะสร้างแบบ temporary เมื่อสั่ง save จึงจะถามว่าเก็บเข้า directory ใด ซึ่งพบว่ามี option ให้เลือกกำหนดว่าจะจัดเก็บแบบใดได้
เอกสารอ้างอิง
[1] เรวัตร ธรรมาอภิรมย์, "เจาะลึกเทคโนโลยีใหม่ Microsoft .net Framework", บริษัท เอส.พี.ซี.พริ้นติ้ง จำกัด, กรุงเทพฯ, 2544.
[2] พร้อมเลิศ หล่อวิจิตร, "คู่มือเรียน Visual Basic 2005", บริษัท โปรวิชั่น จำกัด., กรุงเทพฯ, 2549.
[3] ธวัชชัย สุริยะทองธรรม, "พัฒนาเว็บแอพพลิเคชั่น ASP.NET", บริษัท ซัคเซส มีเดีย จำกัด., กรุงเทพฯ, 2548.
[4] ยุทธนา ลีลาศวัฒนกุล, "คู่มือการเขียนโปรแกรมและใช้งาน Visual C++.NET", สำนักพิมพ์อินโฟเพรส, กรุงเทพฯ, 2546.
[5] กิตติ ภักดีวัฒนะกุล, จำลอง ครูอุตสาหะ, "ASP ฉบับโปรแกรมเมอร์", บริษัท เคทีพี คอมพ์ แอนด์ คอนซัลท์ จำกัด., กรุงเทพฯ, 2543.

http://goo.gl/72BPC