เริ่มเลยขอทำ Reference Links ไปที่ WMI ใน MSDN ก่อนนะครับ
Ref :: WMI
คือว่าแบบนี้ครับ วันนี้ผมมีเวลาว่างช่วงบ่ายเล็กน้อย และเคยมีความคิดว่า เออนะ อยากเขียน
โปรแกรมที่สามารถ เรียกรายละเอียดของ Hardware มาดูได้
แต่ผมก็ไม่เข้าใจหรอกนะว่ามันจะไปเรียกมาได้ยังไง แต่อยู่ๆ ผมก็นึกถึง WMI ขึ้นมาได้
ว่าผมเคยอ่านใน MSDN ของ Microsoft และก็ในกระทู้ของอาจารย์สุเทพ
Ref :: กระทู้เกี่ยวกับ WMI ใน Greatfrieds.biz
และผมก็ทดลองใช้หลายๆอย่างดังนี้
- เรียก Printer ที่มีในเครื่อง
- ตรวจดูจำนวน CPU และ ชื่อ CPU
- เรียกดูชื่อ CD-ROM
และผมยังพบอีกว่า ผมสามารถทำ Remote ด้วย WMI ได้ . . ( เด็ดดวง )
ข้อเสีย
จากที่ผมพบข้อเสียในการใช้ WMI ด้วย .Net ( คือตัว .net จะทำ Wrapper ) ให้เราเอง
ก็ช่วยให้เขียนได้ง่ายเหมือนกับเขียน .Net เองเลย แต่ติดตรงที่ทำงานช้าไปนิด . . เพราะที่
ผมทดลองนี่เป็น Console App นะ . . ถ้าเป็น Winapp คงช้ามากๆเหมือนกัน
Friday, September 08, 2006
การตั้งค่าหน้ากระดาษ ให้ Printer บน WinXP
ผมติดปัญหากับโปรแกรมที่ใช้ในที่ทำงาน ( รพ. ) มาได้ประมาณ 5 เดือนแล้ว
นั่นเป็นเหตุผลที่ผมต้องใช้ Windows98/ME ในการสั่งพิมพ์ต่างๆ ในชุดโปรแกรม Mrecord
จนกระทั่งวันนี้ผมได้เจอกระทู้เกี่ยวกับวิธีการตั้งค่ากระดาษบน Windows XP
ต้องขอขอบคุณคุณ GOOK เพื่อนจาก Community ของ Greatfriends.biz จริงๆครับ.
หลังจากผมทดลองตั้งค่าตามที่แนะนำไว้ในกระทู้ ก็ปรากฏว่าสามารถใช้ได้จริงๆ . .
เรื่องง่ายๆ ที่เป็นความรู้ใหม่เลยนะครับ ผมคิดมาตลอดเลยว่ามันทำไม่ได้ : P
วิธีการคือคลิกที่ Start->Printer and Fax
แล้วเลือกที่ Menu :: File -> Server Properties
แค่นี้เอง
นั่นเป็นเหตุผลที่ผมต้องใช้ Windows98/ME ในการสั่งพิมพ์ต่างๆ ในชุดโปรแกรม Mrecord
จนกระทั่งวันนี้ผมได้เจอกระทู้เกี่ยวกับวิธีการตั้งค่ากระดาษบน Windows XP
ต้องขอขอบคุณคุณ GOOK เพื่อนจาก Community ของ Greatfriends.biz จริงๆครับ.
หลังจากผมทดลองตั้งค่าตามที่แนะนำไว้ในกระทู้ ก็ปรากฏว่าสามารถใช้ได้จริงๆ . .
เรื่องง่ายๆ ที่เป็นความรู้ใหม่เลยนะครับ ผมคิดมาตลอดเลยว่ามันทำไม่ได้ : P
วิธีการคือคลิกที่ Start->Printer and Fax
แล้วเลือกที่ Menu :: File -> Server Properties
แค่นี้เอง
คำสั่ง SQL เรียกดู Tables และ Database
ปกติแล้วผมไม่ค่อยได้ใช้คำสั่งพวกนี้สักเท่าไร ก็เพราะว่าเรามี SQL Manager ดีๆให้ใช้เยอะ
แต่ก็นั่นแหละ บางทีก็อยากจะรู้ไว้บ้างเหมือนกัน
ตัวอย่าง SQL ต่อไปนี้ใช้สำหรับ MySQL นะ อันอื่นๆ ยังไม่เคยลองแต่น่าจะคล้ายๆกัน
SHOW TABLES;
SHOW TABLES FROM db_name;
SHOW DATABASES;
SHOW TABLES LIKE 'tbl_name';
SHOW TABLES STATUS;
SHOW COLUMNS FROM tbl_name;
SHOW INDEX FROM tbl_name;
SHOW CREATE TABLE tbl_name;
SHOW CREATE DATABASE db_name;
ทดสอบทุกคำสั่งกับ MySQL 5.0.28 แล้วครับ ^-^
และก็ลองหาข้อมูลเทียบกับ Firebird ดูแล้ว รู้สึกว่าจะคำสั่งเดียวกันเพียงแต่เวลาใช้
FireBird ต้องเรียก ISQL ออกมาเท่านั้นเอง ^ ^
แต่ก็นั่นแหละ บางทีก็อยากจะรู้ไว้บ้างเหมือนกัน
ตัวอย่าง SQL ต่อไปนี้ใช้สำหรับ MySQL นะ อันอื่นๆ ยังไม่เคยลองแต่น่าจะคล้ายๆกัน
SHOW TABLES;
SHOW TABLES FROM db_name;
SHOW DATABASES;
SHOW TABLES LIKE 'tbl_name';
SHOW TABLES STATUS;
SHOW COLUMNS FROM tbl_name;
SHOW INDEX FROM tbl_name;
SHOW CREATE TABLE tbl_name;
SHOW CREATE DATABASE db_name;
ทดสอบทุกคำสั่งกับ MySQL 5.0.28 แล้วครับ ^-^
และก็ลองหาข้อมูลเทียบกับ Firebird ดูแล้ว รู้สึกว่าจะคำสั่งเดียวกันเพียงแต่เวลาใช้
FireBird ต้องเรียก ISQL ออกมาเท่านั้นเอง ^ ^
โปรแกรมเข้ารหัสไฟล์ SQLite DB ที่ผมพัฒนาขึ้น
หน้าตาของโปรแกรมที่ผมพัฒนาขึ้นจะเป็นแบบนี้นะครับ

สำหรับ Sourcecode
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Data.SQLite;
using System.Windows.Forms;
namespace SetPasswordProtect
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public string datasource;
public string ConStr;
private void btnFind_Click(object sender, EventArgs e)
{
if (openFileDlg.ShowDialog() == DialogResult.OK)
{
string dbPath;
dbPath = openFileDlg.FileName;
label3.Text = dbPath;
datasource = dbPath;
ConStr = "Data Source="+datasource+";version=3;";
}
else
{
MessageBox.Show("พบข้อผิดพลาด ","ข้อผิดพลาด");
}
}
private void btnPwdSet_Click(object sender, EventArgs e)
{
if ((datasource == "") || (ConStr == "") || (txtPwdSet.Text == ""))
{
MessageBox.Show("พบข้อผิดพลาด ", " ข้อผิดพลาด");
}
else
{
try
{
SQLiteConnection Conn = new SQLiteConnection(ConStr);
Conn.Open();
Conn.ChangePassword(txtPwdSet.Text);
Conn.Close();
MessageBox.Show("Complete Setting Password", "Result");
}
catch (SQLiteException ex)
{
MessageBox.Show(ex.ToString(), " ข้อผิดพลาดจาก SQLite");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), " ข้อผิดพลาดจากระบบ");
}
}
}
}
}
ที่เห็นด้านบนก็คือ Sourcecode ของโปรแกรมที่ผมเขียน ( C# นะครับ )

สำหรับ Sourcecode
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Data.SQLite;
using System.Windows.Forms;
namespace SetPasswordProtect
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public string datasource;
public string ConStr;
private void btnFind_Click(object sender, EventArgs e)
{
if (openFileDlg.ShowDialog() == DialogResult.OK)
{
string dbPath;
dbPath = openFileDlg.FileName;
label3.Text = dbPath;
datasource = dbPath;
ConStr = "Data Source="+datasource+";version=3;";
}
else
{
MessageBox.Show("พบข้อผิดพลาด ","ข้อผิดพลาด");
}
}
private void btnPwdSet_Click(object sender, EventArgs e)
{
if ((datasource == "") || (ConStr == "") || (txtPwdSet.Text == ""))
{
MessageBox.Show("พบข้อผิดพลาด ", " ข้อผิดพลาด");
}
else
{
try
{
SQLiteConnection Conn = new SQLiteConnection(ConStr);
Conn.Open();
Conn.ChangePassword(txtPwdSet.Text);
Conn.Close();
MessageBox.Show("Complete Setting Password", "Result");
}
catch (SQLiteException ex)
{
MessageBox.Show(ex.ToString(), " ข้อผิดพลาดจาก SQLite");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), " ข้อผิดพลาดจากระบบ");
}
}
}
}
}
ที่เห็นด้านบนก็คือ Sourcecode ของโปรแกรมที่ผมเขียน ( C# นะครับ )
Thursday, September 07, 2006
ทดลองใส่เพลงบน Blog
ผมเคยเขียนเกี่ยวกับวิธีการ Embled Windows Media Player ลงใน Blog
เมื่อเดือนสิงหา ที่ผ่านมา
มาวันนี้ผมได้ทดสอบนำไฟล์ MP3 ไปวางไว้ใน Server ของผมเองที่เช่าไว้
แล้วก็ทำการ Embled เพลงใส่เข้าไปใน Blog โดยให้ WM ไปเรียกเพลงมา
จาก URL ที่ชี้ไปที่เวบไซต์ของผม ^^
ได้ไม่ได้เดี๋ยวก็รู้กันแล้วครับ ( แต่ผมว่าได้นะ เพราะเมื่อกี้ได้ยินเสียงเพลงแล้ว )
เมื่อเดือนสิงหา ที่ผ่านมา
มาวันนี้ผมได้ทดสอบนำไฟล์ MP3 ไปวางไว้ใน Server ของผมเองที่เช่าไว้
แล้วก็ทำการ Embled เพลงใส่เข้าไปใน Blog โดยให้ WM ไปเรียกเพลงมา
จาก URL ที่ชี้ไปที่เวบไซต์ของผม ^^
ได้ไม่ได้เดี๋ยวก็รู้กันแล้วครับ ( แต่ผมว่าได้นะ เพราะเมื่อกี้ได้ยินเสียงเพลงแล้ว )
รหัสผ่านที่มากับ Virus
วันนี้ผมเจอไวรัสครับ . . . ไอ้เจ้าไวรัสตัวนี้ มันไปใส่รหัสผ่านให้กับ Administrator ของ XP
งานนี้ คงต้องบอกว่าผมโชคดีนะ ที่ว่าเคยอ่าน algorithm ของ virus ตัวนี้มา ( แต่ก็ลืมแล้ว )
ที่แน่ๆ ผมจำได้ว่า Password มันจะเป็น : hackme หรือ hacked ตัวใดตัวนึง
ก็เป็นดังคาดครับ แก้ไขได้
แต่ที่ยังแก้ไม่ได้ก็คือ Folder Option มันถูก Lock เอาไว้ แต่ผมก็จำได้ว่าให้ทำการแก้ไข
No FolderOption = 1 ( ลบทิ้งซะ ไม่แน่ใจพิมพ์ถูกไหมแต่ประมาณนี้แหละ )
ส่วนไอ่ที่ Registry มันไม่ให้เราแก้ไข ( คือเราเรียก Regedit แล้วใช้ไม่ได้ )
มันบอกว่า The registry has been disable by your administrator
ก็ประมาณนี้มั้ง
แต่ถ้าอยากจะแก้จริงๆก็สร้าง account ใหม่ขึ้นมาแล้วก็ไปแก้ซะ . . .
งานนี้ คงต้องบอกว่าผมโชคดีนะ ที่ว่าเคยอ่าน algorithm ของ virus ตัวนี้มา ( แต่ก็ลืมแล้ว )
ที่แน่ๆ ผมจำได้ว่า Password มันจะเป็น : hackme หรือ hacked ตัวใดตัวนึง
ก็เป็นดังคาดครับ แก้ไขได้
แต่ที่ยังแก้ไม่ได้ก็คือ Folder Option มันถูก Lock เอาไว้ แต่ผมก็จำได้ว่าให้ทำการแก้ไข
No FolderOption = 1 ( ลบทิ้งซะ ไม่แน่ใจพิมพ์ถูกไหมแต่ประมาณนี้แหละ )
ส่วนไอ่ที่ Registry มันไม่ให้เราแก้ไข ( คือเราเรียก Regedit แล้วใช้ไม่ได้ )
มันบอกว่า The registry has been disable by your administrator
ก็ประมาณนี้มั้ง
แต่ถ้าอยากจะแก้จริงๆก็สร้าง account ใหม่ขึ้นมาแล้วก็ไปแก้ซะ . . .
การสร้าง XSD เพื่อใช้ทำ Report
วันนี้ได้มีโอกาศคุยกับคุณ Nine ซึ่งเป็น MVP ของ Microsoft Thailand คนหนึ่ง
เลยได้ขอคำแนะนำเกี่ยวกับการสร้าง XSD เพื่อใช้ในการทำ Report กับ CR บน .Net
ซึ่งผมเคยศึกษาจากโปรแกรมที่คุณ Nine ได้ทำไว้ให้ แต่โปรแกรมนั้นสามารถใช้ได้กับ
เฉพาะ DBMS ของ MySQL 4 ขึ้นไป และ MS SQL2000 - 2005
แต่ความต้องการของผมมันมากเกินกว่านั้น
จากการที่ผมได้ศึกษา Flow งานของโปรแกรมตัวนั้นผมคาดว่าใช้การ SELECT เอา Schema
ของ Table ( ซึ่งต่อมาคุณ Nine แนะนำให้ผมนึกภาพว่าเป็นการดึง Query ดีกว่า )
จากนั้นก็นำเอา Query ที่ได้มาทำการ บรรจุลง Dataset ( ด้วย DataAdapter )
แต่อย่าลืมอ้างอิงถึง System.Xml และต้องทำการ Add Ref ของ DBMS ที่จะใช้ด้วย
แล้วก็ใช้คำสั่งของ DataAdapter แล้วก็ทำงานตากปกติ แต่ว่าตอนที่เราจะทำการ Fill
ให้ทำดังนี้
dbAdap.Fill(ds,ชื่อของ Schema);
// ชื่อของ Schema คือ ชื่อที่เราจะใช้ในบันทึกเป็น Element Name ของ File
ds.WriteXmlSchema("ชื่อไฟล์ . XSD");
คราวนี้ผมเองก็เตรียมตัวแล้วที่จะทำการ พัฒนาโปรแกรมสร้าง XSD สำหรับ DB ต่างๆ
เพื่อใช้ในงานอื่นๆ
ที่แน่ๆ คงต้องให้ Support Database ต่อไปนี้
- Firebird
- MySQL
- SQLite
( ที่เหลือผมยังคิดไม่ออกครับ ^ ^ )
เลยได้ขอคำแนะนำเกี่ยวกับการสร้าง XSD เพื่อใช้ในการทำ Report กับ CR บน .Net
ซึ่งผมเคยศึกษาจากโปรแกรมที่คุณ Nine ได้ทำไว้ให้ แต่โปรแกรมนั้นสามารถใช้ได้กับ
เฉพาะ DBMS ของ MySQL 4 ขึ้นไป และ MS SQL2000 - 2005
แต่ความต้องการของผมมันมากเกินกว่านั้น
จากการที่ผมได้ศึกษา Flow งานของโปรแกรมตัวนั้นผมคาดว่าใช้การ SELECT เอา Schema
ของ Table ( ซึ่งต่อมาคุณ Nine แนะนำให้ผมนึกภาพว่าเป็นการดึง Query ดีกว่า )
จากนั้นก็นำเอา Query ที่ได้มาทำการ บรรจุลง Dataset ( ด้วย DataAdapter )
แต่อย่าลืมอ้างอิงถึง System.Xml และต้องทำการ Add Ref ของ DBMS ที่จะใช้ด้วย
แล้วก็ใช้คำสั่งของ DataAdapter แล้วก็ทำงานตากปกติ แต่ว่าตอนที่เราจะทำการ Fill
ให้ทำดังนี้
dbAdap.Fill(ds,ชื่อของ Schema);
// ชื่อของ Schema คือ ชื่อที่เราจะใช้ในบันทึกเป็น Element Name ของ File
ds.WriteXmlSchema("ชื่อไฟล์ . XSD");
คราวนี้ผมเองก็เตรียมตัวแล้วที่จะทำการ พัฒนาโปรแกรมสร้าง XSD สำหรับ DB ต่างๆ
เพื่อใช้ในงานอื่นๆ
ที่แน่ๆ คงต้องให้ Support Database ต่อไปนี้
- Firebird
- MySQL
- SQLite
( ที่เหลือผมยังคิดไม่ออกครับ ^ ^ )
วิธีการแก้ Registry
วันนี้ Computer ที่ทำงานของผมเจอปัญหาจากที่พี่ไวรัส เค้าทำการฝากรอยรักเอาไว้
ซึ่งผมเองก็ไม่มั่นใจนะครับว่าเป็นไวรัสอะไร แต่เคยเจออาการนี้มานานแล้ว
อาการที่พบจะมีหลายอาการไป แล้วแต่โชคแต่ดวงดังนี้
- เข้า Regedit ไม่ได้
- ใช้ Folder Option ไม่ได้
- เข้า Administrator ไม่ได้เนื่องจากไม่มี Password ที่ใช้เข้า
วิธีการแก้ไขอาการแรกนะครับ ( อาการอื่นๆ ยังคิดไม่ออก )
อาการที่พบนะครับ ขั้นแรกเลย . . เราจะใช้ Regedit ไม่ได้ โดยเมื่อเราเรียก
Start -> Run -> regedit
พี่ MS Windows เค้าจะ Response เรามาดังนี้
Registry editing has been disabled by your adminstrator
พูดง่ายๆ . . มันบอกว่า Registry Edition ถูกปิดไว้โดยผู้ดูแลระบบ
แต่เราก็ Logon ไปเป็นผู้ดูแลระบบแท้ๆ - -''
วิธีการให้เราเรียก Start -> Run -> แล้วพิมพ์ข้อความด้านล่างลงไป
REG add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableRegistryTools /t REG_DWORD /d 0 /f
ให้ติดกันเป็นบรรทัดเดียวแล้วกด Enter จากนั้นให้ Restart ก็จะสามารถใช้ได้เช่นเคยครับ
ซึ่งผมเองก็ไม่มั่นใจนะครับว่าเป็นไวรัสอะไร แต่เคยเจออาการนี้มานานแล้ว
อาการที่พบจะมีหลายอาการไป แล้วแต่โชคแต่ดวงดังนี้
- เข้า Regedit ไม่ได้
- ใช้ Folder Option ไม่ได้
- เข้า Administrator ไม่ได้เนื่องจากไม่มี Password ที่ใช้เข้า
วิธีการแก้ไขอาการแรกนะครับ ( อาการอื่นๆ ยังคิดไม่ออก )
อาการที่พบนะครับ ขั้นแรกเลย . . เราจะใช้ Regedit ไม่ได้ โดยเมื่อเราเรียก
Start -> Run -> regedit
พี่ MS Windows เค้าจะ Response เรามาดังนี้
Registry editing has been disabled by your adminstrator
พูดง่ายๆ . . มันบอกว่า Registry Edition ถูกปิดไว้โดยผู้ดูแลระบบ
แต่เราก็ Logon ไปเป็นผู้ดูแลระบบแท้ๆ - -''
วิธีการให้เราเรียก Start -> Run -> แล้วพิมพ์ข้อความด้านล่างลงไป
REG add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableRegistryTools /t REG_DWORD /d 0 /f
ให้ติดกันเป็นบรรทัดเดียวแล้วกด Enter จากนั้นให้ Restart ก็จะสามารถใช้ได้เช่นเคยครับ
Export DataGrid Or DataSet To Excel
วิธีการนำข้อมูลใน DataGrid และ DataSet มาทำการ Export ออกเป็น Excel
สามารถทำได้โดยวิธีการดังนี้ ( ใน .Net Framework 2.0 )
ขั้นตอนแรกให้เราทำการ Add Ref ตัว Excel.dll และเขียน Code ในลักษณะดังนี้
Excel.ApplicationClass excel = new ApplicationClass();
excel.Application.Workbooks.Add(true);
DataTable table = DATASETNAME.Table[0];
int ColumnIndex=0;
foreach(Datacolumn col in table.Columns)
{
ColumnIndex++;
excel.Cells[1,ColumnIndex]=col.ColumnName;
}
int rowIndex=0;
foreach(DataRow row in table.Row)
{
rowIndex++;
ColumnIndex=0;
foreach(DataColumn col in table.Columns)
{
ColumnIndex++;
excel.Cells[rowIndex+1,ColumnIndex]=row.Cells[col.ColumnName].Text;
}
}
excel.Visible = true;
Worksheet worksheet = (Worksheet)excel.ActiveSheet;
worksheet.Activate();
}
สามารถทำได้โดยวิธีการดังนี้ ( ใน .Net Framework 2.0 )
ขั้นตอนแรกให้เราทำการ Add Ref ตัว Excel.dll และเขียน Code ในลักษณะดังนี้
Excel.ApplicationClass excel = new ApplicationClass();
excel.Application.Workbooks.Add(true);
DataTable table = DATASETNAME.Table[0];
int ColumnIndex=0;
foreach(Datacolumn col in table.Columns)
{
ColumnIndex++;
excel.Cells[1,ColumnIndex]=col.ColumnName;
}
int rowIndex=0;
foreach(DataRow row in table.Row)
{
rowIndex++;
ColumnIndex=0;
foreach(DataColumn col in table.Columns)
{
ColumnIndex++;
excel.Cells[rowIndex+1,ColumnIndex]=row.Cells[col.ColumnName].Text;
}
}
excel.Visible = true;
Worksheet worksheet = (Worksheet)excel.ActiveSheet;
worksheet.Activate();
}
Wednesday, September 06, 2006
Code C# Connect FireBird
หลังจากติดตั้ง ADO.Net Provider For .Net Framework 2 สำหรับ FireBird แล้ว
เราก็ต้องทำการ Add Reference ตัว FirebirdSql.Data.FireBirdClient มาไว้ในโปรเจค
จากนั้นก็ทำการเขียน Code ดังนี้
using System;
using System.Collections.Generic;
using System.Text;
using FirebirdSql.Data.FirebirdClient;
namespace FireBirdTestCon
{
class Program
{
static void Main(string[] args)
{
string ConStr = "Database=C:\\Program Files\\Firebird\\Firebird_1_5"+
"\\examples\\EMPLOYEE.FDB;User=SYSDBA;Password=masterkey;"+
"Dialect=3;Server=localhost;";
FbConnection Conn = new FbConnection(ConStr);
Conn.Open();
Console.WriteLine(Conn.ServerVersion);
Console.ReadLine();
Conn.Close();
}
}
}
ผลจากการรันโค๊ตด้านบน โปรแกรมจะตอบกลับ Version ของ FireBird ที่เราใช้อยู่มา
####################################################
แต่ตอนนี้ผมยังหาตัวจัดการ DBMS ของ FireBird ที่เป็น GUI ไม่ได้เลยครับ T T
และผมก็ยังไม่รู้จัก DataType ของ FireBird อีกตั้งหาก
เราก็ต้องทำการ Add Reference ตัว FirebirdSql.Data.FireBirdClient มาไว้ในโปรเจค
จากนั้นก็ทำการเขียน Code ดังนี้
using System;
using System.Collections.Generic;
using System.Text;
using FirebirdSql.Data.FirebirdClient;
namespace FireBirdTestCon
{
class Program
{
static void Main(string[] args)
{
string ConStr = "Database=C:\\Program Files\\Firebird\\Firebird_1_5"+
"\\examples\\EMPLOYEE.FDB;User=SYSDBA;Password=masterkey;"+
"Dialect=3;Server=localhost;";
FbConnection Conn = new FbConnection(ConStr);
Conn.Open();
Console.WriteLine(Conn.ServerVersion);
Console.ReadLine();
Conn.Close();
}
}
}
ผลจากการรันโค๊ตด้านบน โปรแกรมจะตอบกลับ Version ของ FireBird ที่เราใช้อยู่มา
####################################################
แต่ตอนนี้ผมยังหาตัวจัดการ DBMS ของ FireBird ที่เป็น GUI ไม่ได้เลยครับ T T
และผมก็ยังไม่รู้จัก DataType ของ FireBird อีกตั้งหาก
Firebird Project
เมื่อวานผมได้เขียนอะไรถึง Firebird นิดหน่อย และวันนี้ก็เลยลองหาข้อมูลเกี่ยวกับ
การใช้งาน Firebird กับ .net ก็เจอ ADO.net สำหรับ Firebird
Ref:: FireBird Project
การใช้งาน Firebird กับ .net ก็เจอ ADO.net สำหรับ Firebird
Ref:: FireBird Project
Tuesday, September 05, 2006
ผมเพิ่งรู้ว่า Firebird ฟรี
ผมทราบมาตลอดว่า Borland มี Database ดีดี อยู่ตัวหนึ่งนั่นก็คือ Interbase
ซึ่งที่ผมทราบเพราะผมเคยต้องเขียน Delphi ต่อกับฐานข้อมูล Interbase
ตอนนั้นผมเป็นนักศึกษา มหาวิทยาลัยให้ผมใช้ Borland Delphi 5 ต่อ Interbase
ผมก็ใช้ทำโปรแกรมระบบทะเบียนลูกจ้างหน่วยงานรัฐ ( ลูกจ้างชั่วคราวรายวัน รายเดือน )
ซึ่งผมใช้ Interbase เป็น Database Server
เอากันจริงๆ ผมไม่ค่อยคุ้นเคยกับ Interbase นักหรอกครับแต่ผมก็พอจะรู้ว่า Firebird
ก็เป็น Interbase นั่นแหละ ( คล้ายๆ Fedora กับ Redhat ) ในความคิดของผมนะ
จนผมได้ทราบว่า Borland ประกาศแจก Interbase ให้ใช้ได้ฟรีๆ
แต่ผมไม่รู้ว่า Firebird ก็แจกฟรีด้วย
จนกระทั่งวันนี้ผมต้องปล้ำกับ Firebird เนื่องจากผมต้องติดตั้งชุดโปรแกรม Mrecord
หลังจากที่ผมได้ทดลองใช้สักพัก . . ไม่ลึงซึ้งมาก
ผมพบว่ามันเป็น DBMS ที่น่าสนใจตัวนึงเลยทีเดียว เป็นข้อๆดังนี้
1. ฟรี
2. มีทั้งบน Windows/Linux/Unix/MacOS
3. มีคนบอกว่า Copy ไฟล์ .gdb ไปวางข้าม Platform ของ OS ก็ยังใช้ได้
4. มี Trigger และ Store Procedure ให้ผมใช้ ( ถึงผมจะยังไม่เคยใช้มันจริงๆ )
5. ทำ VIEW ได้
6. น่าจะ Stable กว่า MySQL ในความคิดผมนะ ( ไม่ Confirm )
ผมว่ามันลดต้นทุนให้ Developer ได้ดีทีเดียวนะ แต่ก็อย่างเคยครับมันใหญ่เกินไปสำหรับ
โปรแกรมเล็กๆ . . . แต่ถ้าพัฒนาโปรแกรมใหญ่ๆ ต่อไปนี้ Firebird จะเป็นตัวเลือก
อันดับต้นๆ ของผมเลยล่ะ ( ลองจาก MySQL ) แต่ผมได้ยินมาว่า MySQL ไม่ฟรีบน Window
จริงเท็จนี่ผมเองก็ไม่รู้ แต่ถ้าเป็นจริง ผมก็จะหันไปใช้ DBMS ตัวอื่นแทน
ผมยอมรับว่าปัจจุบันก็ละเมิดลิขสิทธิ์ของ IDE และพวกเครื่องมือพัฒนาอยู่ ก็เพราะผมไม่มีเงินซื้อ
และราคาค่าตอบแทนที่ได้จาก Software ที่ขายไปก็ยังไม่เพียงพอสำหรับการนำไปซื้อลิขสิทธิ์
แต่ถ้าทำเป็นบริษัทผมก็คงต้องหาเงินไปซื้อมาเพื่อทำให้มันถูกต้อง
แต่ปัจจุบันนี้ผมไม่มีเงินเพราะฉะนั้นหน้าที่ของผมก็ควรทำให้มันผิดกฏหมายน้อยที่สุด 5 5 5 5
เพราะผมเชื่อว่า Developer ที่ดี ต้องไม่มีเจตนาที่จะละเมิดทรัพย์สินและความคิดผู้อื่น
Reference :: FireBird Resource
ซึ่งที่ผมทราบเพราะผมเคยต้องเขียน Delphi ต่อกับฐานข้อมูล Interbase
ตอนนั้นผมเป็นนักศึกษา มหาวิทยาลัยให้ผมใช้ Borland Delphi 5 ต่อ Interbase
ผมก็ใช้ทำโปรแกรมระบบทะเบียนลูกจ้างหน่วยงานรัฐ ( ลูกจ้างชั่วคราวรายวัน รายเดือน )
ซึ่งผมใช้ Interbase เป็น Database Server
เอากันจริงๆ ผมไม่ค่อยคุ้นเคยกับ Interbase นักหรอกครับแต่ผมก็พอจะรู้ว่า Firebird
ก็เป็น Interbase นั่นแหละ ( คล้ายๆ Fedora กับ Redhat ) ในความคิดของผมนะ
จนผมได้ทราบว่า Borland ประกาศแจก Interbase ให้ใช้ได้ฟรีๆ
แต่ผมไม่รู้ว่า Firebird ก็แจกฟรีด้วย
จนกระทั่งวันนี้ผมต้องปล้ำกับ Firebird เนื่องจากผมต้องติดตั้งชุดโปรแกรม Mrecord
หลังจากที่ผมได้ทดลองใช้สักพัก . . ไม่ลึงซึ้งมาก
ผมพบว่ามันเป็น DBMS ที่น่าสนใจตัวนึงเลยทีเดียว เป็นข้อๆดังนี้
1. ฟรี
2. มีทั้งบน Windows/Linux/Unix/MacOS
3. มีคนบอกว่า Copy ไฟล์ .gdb ไปวางข้าม Platform ของ OS ก็ยังใช้ได้
4. มี Trigger และ Store Procedure ให้ผมใช้ ( ถึงผมจะยังไม่เคยใช้มันจริงๆ )
5. ทำ VIEW ได้
6. น่าจะ Stable กว่า MySQL ในความคิดผมนะ ( ไม่ Confirm )
ผมว่ามันลดต้นทุนให้ Developer ได้ดีทีเดียวนะ แต่ก็อย่างเคยครับมันใหญ่เกินไปสำหรับ
โปรแกรมเล็กๆ . . . แต่ถ้าพัฒนาโปรแกรมใหญ่ๆ ต่อไปนี้ Firebird จะเป็นตัวเลือก
อันดับต้นๆ ของผมเลยล่ะ ( ลองจาก MySQL ) แต่ผมได้ยินมาว่า MySQL ไม่ฟรีบน Window
จริงเท็จนี่ผมเองก็ไม่รู้ แต่ถ้าเป็นจริง ผมก็จะหันไปใช้ DBMS ตัวอื่นแทน
ผมยอมรับว่าปัจจุบันก็ละเมิดลิขสิทธิ์ของ IDE และพวกเครื่องมือพัฒนาอยู่ ก็เพราะผมไม่มีเงินซื้อ
และราคาค่าตอบแทนที่ได้จาก Software ที่ขายไปก็ยังไม่เพียงพอสำหรับการนำไปซื้อลิขสิทธิ์
แต่ถ้าทำเป็นบริษัทผมก็คงต้องหาเงินไปซื้อมาเพื่อทำให้มันถูกต้อง
แต่ปัจจุบันนี้ผมไม่มีเงินเพราะฉะนั้นหน้าที่ของผมก็ควรทำให้มันผิดกฏหมายน้อยที่สุด 5 5 5 5
เพราะผมเชื่อว่า Developer ที่ดี ต้องไม่มีเจตนาที่จะละเมิดทรัพย์สินและความคิดผู้อื่น
Reference :: FireBird Resource
Hungarian Notation
Hungarian Notation เป็นวิธีการประกาศชื่อตัวแปร ให้ง่ายต่อการจดจำ
โดยถือเป็นมาตรฐานอย่างหนึ่งในการ เขียนโปรแกรม
Ref :: Hungarian Notation
โดยถือเป็นมาตรฐานอย่างหนึ่งในการ เขียนโปรแกรม
Ref :: Hungarian Notation
Spec ของ C# 3.0
ถึงตอนนี้ .Net จะอยู่ที่ Version 2 แต่ว่า C# ก็ได้ประกาศ Spec ของ V 3 มาแล้ว
ความจริงแล้ว Spec ของ C#3.0 ก็มีเพิ่มมาหลายอย่าง ยกตัวอย่างเช่นการใช้ var ในการ
ประกาศตัวแปร
ตัวอย่าง
var num = 5;
var name = "Piyanut";
var vat = 0.7;
var ในที่นี้คือ variable ซึ่งเราสามารถใช้ประกาศตัวแปรได้โดยไม่ต้องกำหนด datatype
แต่มีข้อแม้คือ เราต้องกำหนดค่าเริ่มต้นให้กับตัวแปรที่ประกาศด้วย var ทันที และค่าที่ตั้งจะต้อง
ไม่ใช่ null
แต่ที่เห็นจะนิยมกันที่สุดคือ LINQ
ตัวอย่างการใช้ LINQ ใน C#3.0 ดูได้จากเวบ Microsoft เช่นเคยครับ
Ref :: LINQ SAMPLE
ความจริงแล้ว Spec ของ C#3.0 ก็มีเพิ่มมาหลายอย่าง ยกตัวอย่างเช่นการใช้ var ในการ
ประกาศตัวแปร
ตัวอย่าง
var num = 5;
var name = "Piyanut";
var vat = 0.7;
var ในที่นี้คือ variable ซึ่งเราสามารถใช้ประกาศตัวแปรได้โดยไม่ต้องกำหนด datatype
แต่มีข้อแม้คือ เราต้องกำหนดค่าเริ่มต้นให้กับตัวแปรที่ประกาศด้วย var ทันที และค่าที่ตั้งจะต้อง
ไม่ใช่ null
แต่ที่เห็นจะนิยมกันที่สุดคือ LINQ
ตัวอย่างการใช้ LINQ ใน C#3.0 ดูได้จากเวบ Microsoft เช่นเคยครับ
Ref :: LINQ SAMPLE
โปรแกรมที่ดีเริ่มที่การออกแบบ
โปรแกรมที่ดีเริ่มที่การออกแบบ . . . .
บังเอิญผมเจอ Blog บทความนี้มาจาก Blog ของคุณ Bact ซึ่งเกี่ยวกับการออกแบบ Interface
แต่บทความนี้เป็นการออกแบบ User Interface บน MacOS . .
แต่ไม่เป็นไรครับ เพราะเราสามารถนำไปใช้ได้จริงกับทุกๆ OS เนื่องจากการออกแบบโปรแกรมมีพื้นฐาน
มาจากสิ่งเดียวกัน ผมว่าเป็นบทความที่ดีมากๆเลยครับ ขอบคุณผู้เขียนและผู้เรียบเรียงจากใจจริง
Ref :: โปรแกรมที่ดีเริ่มที่การออกแบบ
บังเอิญผมเจอ Blog บทความนี้มาจาก Blog ของคุณ Bact ซึ่งเกี่ยวกับการออกแบบ Interface
แต่บทความนี้เป็นการออกแบบ User Interface บน MacOS . .
แต่ไม่เป็นไรครับ เพราะเราสามารถนำไปใช้ได้จริงกับทุกๆ OS เนื่องจากการออกแบบโปรแกรมมีพื้นฐาน
มาจากสิ่งเดียวกัน ผมว่าเป็นบทความที่ดีมากๆเลยครับ ขอบคุณผู้เขียนและผู้เรียบเรียงจากใจจริง
Ref :: โปรแกรมที่ดีเริ่มที่การออกแบบ
Document Ref สำหรับ .net จาก Microsoft
Reference Web ทั้งหมดที่แสดงนี้อ้างอิงกับ .Net Framework Version 2.0
Reference
.Net Framework Tool
Win32API Compare with .Net Library
.Net Framework V2 Obsolete Type/Member List (By NameSpace)
Reference
.Net Framework Tool
Win32API Compare with .Net Library
.Net Framework V2 Obsolete Type/Member List (By NameSpace)
การเพิ่มความเร็วตอน StartUp ให้ .net App
ประสบปัญหาเดียวกันแทบทุกคนสำหรับ Dev ที่ใช้ Java หรือ .net ในการพัฒนาโปรแกรม
ก็คือเวลาที่เสียไปกับการ StartUp Program มันช้ามากๆจริงๆ
หลังจากที่ค้นหาข้อมูลทาง Internet และได้ถามผู้คนใน Forum รวมถึงดูจาก MSDN ผมพบว่า
Microsoft ได้เตรียมเครื่องมือไว้ตัวนึงซึ่งใช้สำหรับเพิ่มความเร็วในการ StartUp App ที่พัฒนา
ด้วย .net ได้
นั้นคือ Ngen.exe ( Native Image Generator ) วิธีการใช้งานดูได้จาก MSDN
Ref :: Ngen.exe
หลังจากผมได้ทดลองใช้แล้ว ก็พบว่าเร็วขึ้น แต่ก็ไม่ได้มากมายนัก . . . แต่ก็ยังดีครับ ^ ^
ก็คือเวลาที่เสียไปกับการ StartUp Program มันช้ามากๆจริงๆ
หลังจากที่ค้นหาข้อมูลทาง Internet และได้ถามผู้คนใน Forum รวมถึงดูจาก MSDN ผมพบว่า
Microsoft ได้เตรียมเครื่องมือไว้ตัวนึงซึ่งใช้สำหรับเพิ่มความเร็วในการ StartUp App ที่พัฒนา
ด้วย .net ได้
นั้นคือ Ngen.exe ( Native Image Generator ) วิธีการใช้งานดูได้จาก MSDN
Ref :: Ngen.exe
หลังจากผมได้ทดลองใช้แล้ว ก็พบว่าเร็วขึ้น แต่ก็ไม่ได้มากมายนัก . . . แต่ก็ยังดีครับ ^ ^
Create Quality Application in Windows Vista
วันนี้ผมกำลังสร้าง Favorites หลังจากที่ทำการ Format เครื่องใหม่เพื่อที่จะให้ลง VS.net2005 ได้
ไม่เชื่อก็ต้องเชื่อนะ ว่าปัญหามันอยู่ที่ Windows ทั้งๆที่ผมไม่พบอาการผิดปกติใดๆจากการใช้งานเลย
แต่ windows ที่ลงจากแผ่นนั้นกลับไม่สามารถติดตั้ง VS.net2005 ได้ ( แปลกแต่จริง )
เช้านี้ทันทีที่เข้ามาผมก็เริ่มเก็บ Favorite ของเวบต่างๆใหม่เนื่องจากของเก่านั้นผมไม่ได้ Backup ไว้
แล้วก็แน่นอนแวะไปเยี่ยม MSDN ของ Microsoft และพบหัวข้อ สร้างโปรแกรมที่ดีบน Vista
ก็เลยทำ Links ไว้ก่อนเพราะ เผื่อจะกลับมาอ่านใหม่ตอนที่เวบ MSDN เอาออกจากหน้าแรก
Ref :: Create Quality Application in Windows Vista
ความจริงมาจนถึงวันนี้ผมยังไม่เชิงเข้าใจว่า .net 3.0 หรือ .net fx เดิมนั้นมันสิ่งที่เพิ่มมาจาก .net 2
คืออะไรกันแน่ กำลังหาข้อมูลอยู่เหมือนกัน แต่เห็นว่า Microsoft เตรียมจะจัดสัมมนาแนะนำเทคโนโลยี
ซึ่งจะแนะนำ WinFx ซึ่งอยู่ใน .net3.0 ด้วยผมก็หวังว่าจะได้เห็นคำติชมและวิจารณ์ตามเวบบอร์ด
ระหว่างนี้ก็รอต่อไป ^ ^
ไม่เชื่อก็ต้องเชื่อนะ ว่าปัญหามันอยู่ที่ Windows ทั้งๆที่ผมไม่พบอาการผิดปกติใดๆจากการใช้งานเลย
แต่ windows ที่ลงจากแผ่นนั้นกลับไม่สามารถติดตั้ง VS.net2005 ได้ ( แปลกแต่จริง )
เช้านี้ทันทีที่เข้ามาผมก็เริ่มเก็บ Favorite ของเวบต่างๆใหม่เนื่องจากของเก่านั้นผมไม่ได้ Backup ไว้
แล้วก็แน่นอนแวะไปเยี่ยม MSDN ของ Microsoft และพบหัวข้อ สร้างโปรแกรมที่ดีบน Vista
ก็เลยทำ Links ไว้ก่อนเพราะ เผื่อจะกลับมาอ่านใหม่ตอนที่เวบ MSDN เอาออกจากหน้าแรก
Ref :: Create Quality Application in Windows Vista
ความจริงมาจนถึงวันนี้ผมยังไม่เชิงเข้าใจว่า .net 3.0 หรือ .net fx เดิมนั้นมันสิ่งที่เพิ่มมาจาก .net 2
คืออะไรกันแน่ กำลังหาข้อมูลอยู่เหมือนกัน แต่เห็นว่า Microsoft เตรียมจะจัดสัมมนาแนะนำเทคโนโลยี
ซึ่งจะแนะนำ WinFx ซึ่งอยู่ใน .net3.0 ด้วยผมก็หวังว่าจะได้เห็นคำติชมและวิจารณ์ตามเวบบอร์ด
ระหว่างนี้ก็รอต่อไป ^ ^
Sunday, September 03, 2006
Connection String
Note กันลืมนะครับ
Connection String ของ .net 2 สำหรับเรียกใช้ Oracle DB
ให้ทำการ Load ไลบรารี่ นี้ครับ
using System.Data.OracleClient;
สำหรับ String Connection
แบบอย่างสั้น
"Data Source=SampleDB;Integrated Security=yes;"
แบบมี User และ password
"Data Source=SampleDB;User Id=oradbuser;Password=securepasswd;Integrated Security=no;"
#######################################################################
และสำหรับ ConnectionString ของ DBMS อื่นๆสามารถดูได้จาก
Connection String
Connection String ของ .net 2 สำหรับเรียกใช้ Oracle DB
ให้ทำการ Load ไลบรารี่ นี้ครับ
using System.Data.OracleClient;
สำหรับ String Connection
แบบอย่างสั้น
"Data Source=SampleDB;Integrated Security=yes;"
แบบมี User และ password
"Data Source=SampleDB;User Id=oradbuser;Password=securepasswd;Integrated Security=no;"
#######################################################################
และสำหรับ ConnectionString ของ DBMS อื่นๆสามารถดูได้จาก
Connection String
การเรียกใช้โปรแกรมอื่นจากโปรแกรมเรา
ผมไม่รู้ว่าจะตั้ง Title ยังไงดี . . .
เช่นหากต้องการเขียนโปรแกรมให้ Shutdown เครื่องหรือ Restart เครื่องได้ตามต้องการ
แต่จะต้องรันบน Windows XP นะ ^o^
ถ้าต้องการจะสั่ง Shutdown ทำโดย
System.Diagnostics.Process.Start("shutdown", "/s")
ถ้าจะสั่ง Restart ทำโดย
System.Diagnostics.Process.Start("shutdown", "/r");
ง่ายๆเลยก็เปิด cmd ของ WinXP แล้วก็พิมพ์ shutdown ในช่องจะพบวิธีการใช้คำสั่ง shutdown
แต่สิ่งหนึ่งที่ผมไม่เข้าใจก็คือ ทำไมเราใช้คำสั่ง
using System.Diagnostics;
แล้วทำการประกาศ
Process pc = new Process();
pc.start("shutdown","/s");
แล้วถึงไม่ได้ผล . . . - -''
แต่สั่งตรงๆโดยใช้คำสั่ง
System.Diagnostics.Process.Start("shutdown", "/s");
กลับผ่าน - -'' ไม่เข้าใจ ไม่เข้าใจ ไม่เข้าใจ แต่ช่างมันเถอะครับ ^^
เช่นหากต้องการเขียนโปรแกรมให้ Shutdown เครื่องหรือ Restart เครื่องได้ตามต้องการ
แต่จะต้องรันบน Windows XP นะ ^o^
ถ้าต้องการจะสั่ง Shutdown ทำโดย
System.Diagnostics.Process.Start("shutdown", "/s")
ถ้าจะสั่ง Restart ทำโดย
System.Diagnostics.Process.Start("shutdown", "/r");
ง่ายๆเลยก็เปิด cmd ของ WinXP แล้วก็พิมพ์ shutdown ในช่องจะพบวิธีการใช้คำสั่ง shutdown
แต่สิ่งหนึ่งที่ผมไม่เข้าใจก็คือ ทำไมเราใช้คำสั่ง
using System.Diagnostics;
แล้วทำการประกาศ
Process pc = new Process();
pc.start("shutdown","/s");
แล้วถึงไม่ได้ผล . . . - -''
แต่สั่งตรงๆโดยใช้คำสั่ง
System.Diagnostics.Process.Start("shutdown", "/s");
กลับผ่าน - -'' ไม่เข้าใจ ไม่เข้าใจ ไม่เข้าใจ แต่ช่างมันเถอะครับ ^^
Subscribe to:
Posts (Atom)