Sunday, May 1, 2011

IIS: The requested page cannot be accessed because the related configuration data for the page is invalid

เมื่อคุณเจอ Error

HTTP Error 500.19 - Internal Server Error

The requested page cannot be accessed because the related configuration data for the page is invalid.

ซึ่งเกิดขึ้นหลังจากที่คุณเปลี่ยน password ในการ log on เข้า windows
วิธีแก้ก็คือ
  • เปิด IIS (อยู่ใน Control Panel -> Administration Tools)
  • คลิกที่ Default Website
  • ด้านขวาจะมี Basic Settings คลิกเข้าไป
  • คลิกปุ่ม Connection as ใส่ username และ Password ใหม่ของคุณเข้าไป
แล้วก็ restart IIS ก็จะรันได้ตามปกติ
แต่ถ้า restart IIS แล้วยังเจอ error

HTTP Error 401.2 - Unauthorized

You are not authorized to view this page due to invalid authentication headers.

ให้ reatart Application Pools ด้วย

Friday, April 1, 2011

C#: การอ่านไฟล์ Excel

ถ้าเป็นไฟล์ excel เวอร์ชั่นเก่าที่เป็นนามสกุล .xls ให้อ่านด้วย Microsoft.Jet.OLEDB.4.0 แต่ถ้าเป็นเวอร์ชั่นใหม่ .xlsx ต้องใช้ Microsoft.ACE.OLEDB.12.0

HDR=YES คือไฟล์นั้นมีแถวที่เป็น Header
IMEX=1 เกี่ยวกับการ Encoding ภาษาให้ถูกต้อง


string filePath = @"C:\temp\test.xls";
DataSet objDataset1 = new DataSet();
string ConnectionString = "";
ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
if (filePath.IndexOf("xlsx") != -1) // ถ้าเป็น excel เวอร์ชั่นใหม่
{
ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
}

OleDbConnection objXlsConn = new OleDbConnection(ConnectionString);
objXlsConn.Open();
OleDbDataAdapter objAdapter1 = null;
OleDbCommand objCmdSelect = null;
try
{
// หาชื่อ worksheet.
System.Data.DataTable dt = objXlsConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
DataRow row = dt.Rows[0];
string worksheetName = row["TABLE_NAME"].ToString();

// อ่านทุกแถวใน worksheet ด้วยคำสั่ง SQL
String strConString = "SELECT * from [" + worksheetName + "]";
objCmdSelect = new OleDbCommand(strConString, objXlsConn);
objAdapter1 = new OleDbDataAdapter(objCmdSelect);
objAdapter1.Fill(objDataset1);

// ตั้งตัวแปรสำหรับรับค่าในคอลัมน์
string dataColumn1;
string dataColumn2;

// วนลูปอ่านทีละแถว
foreach (DataRow dr in objDataset1.Tables[0].Rows)
{
dataColumn1 = dr[0].ToString();
dataColumn2 = dr[1].ToString();
// อยากทำอะไรต่อกับค่าที่ได้ก็เขียนตรงนี้
}
}
catch (Exception ex)
{
var strMsg = ex.Message;
// จะทำอะไรกับ error message ก็ทำตรงนี้
}


จะเห็นได้ว่าเราสามารถใช้คำสั่ง SQL กับ worksheet ของ Excel ได้ ทีนี้ในการ Insert, Update, Delete เราก็สามารถทำได้เหมือนกัน

Tuesday, March 1, 2011

JavaScript: วันที่วันพรุ่งนี้

var myDate = new Date(); จะได้วันที่ของวันนี้
ถ้าต้องการวันที่ของวันพรุ่งนี้ หรือล่วงหน้า หรือย้อนหลังไปกี่วันเราก็อาศัยคำสั่ง getDate() บวกหรือลบวันเอา
เช่นวันที่ของวันพรุ่งนี้

var myDate = new Date();
var myTomorrow = myDate.setDate(myDate.getDate()+1);

วันที่ของเมื่อวานนี้
var myYesterday = myDate.setDate(myDate.getDate()-1);

วันที่ของสัปดาห์หน้า
var myNextWeek = myDate.setDate(myDate.getDate()+7);

คำสั่ง getDate() จะได้วันที่ออกมา ถ้าบวก 1 แล้วได้ 32 หรือเกินวันที่จริงของเดือนนั้น มันก็จะปัดไปเป็นวันที่ของเดือนถัดไปอัตโนมัติ

Tuesday, February 1, 2011

SQL Server: sp_rename เปลี่ยนชื่อฟิลด์

ใช้ sp_rename 'ชื่อตาราง.ชื่อฟิลด์เก่า', 'ชื่อฟิลด์ใหม่', 'COLUMN'

ตัวอย่างเช่น

sp_RENAME 'Customer.DocNo', 'RefNo', 'COLUMN'


คือการเปลี่ยนชื่อฟิลด์ในตาราง Customer จาก DocNo ให้เป็น RefNo

ถ้า result ขึ้นว่า

Caution: Changing any part of an object name could break scripts and stored procedures.


แสดงว่าเปลี่ยนชื่อสำเร็จแล้ว

Saturday, January 1, 2011

JavaScript: IsNumeric, isNumber ยอมให้กรอกเฉพาะตัวเลขเท่านั้น

JavaScript มีฟังก์ชั่น IsNumeric() อยู่แล้ว สำหรับเช็คค่าว่าต้องเป็นตัวเลขเท่านั้น แต่มันไม่เวิร์คสำหรับบางเคส เช่น
// Whitespace strings:
IsNumeric(' ') == true;
IsNumeric('\t\t') == true;
IsNumeric('\n\r') == true;

// Number literals:
IsNumeric(-1) == false;
IsNumeric(0) == false;
IsNumeric(1.1) == false;
IsNumeric(8e5) == false;

เราเขียนฟังก์ชั่นเองก็ได้ เช็คได้ถูกต้องกว่าต้นฉบับอีก


function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}

Saturday, December 4, 2010

ยินดีที่ได้รู้จัก

 ขากลับจากอินเดีย หลังจากเครื่องลงที่สนามบินสุวรรณภูมิ ก็เดินผ่านต.ม. รับกระเป๋าเสร็จ แล้วก็เดินผ่านศุลกากร เพื่อนผม 4 คนเดินนำไปก่อน ผมรั้งท้ายอยู่คนเดียว ทันใดนั้นมีศุลกากรหญิงท่านนึงเดินมาดักผม "ซวยแล้ว" ต้องโดนตรวจของแน่ แต่เราก็ไม่ได้มีของอะไรที่ผิดปกตินี่นา จะมาก็แต่ของฝากแบบเดียวกับที่พิงกี้ซื้อมาฝากพี่เป็ก ไม่ทันที่ผมจะคิดไปไกลกว่านั้น "ยูใช่ไหม" เขาถามผม โล่งเลย คนรู้จักกันแน่ แต่ใครหว่า "ใช่...ครับ" ไม่รู้จะครับดีหรือไม่ครับดี เพราะจำไม่ได้ว่ารู้จักกับเขาแบบไหน เป็นเพื่อน เป็นพี่ หรือเป็นน้อง "จำเราได้หรือเปล่า" อ้อ เพื่อนกันแน่ "เคยเรียน มอ.ด้วยกันตอนปี 1 ไง" ใครจะไปจำได้ เรียนด้วยกันปีเดียว แถมไม่ค่อยได้เข้าเรียน แต่ทำไมเขายังจำเราได้ "ยูไม่เปลี่ยนไปเลย" ... อุ๊ยเขิน แสดงว่าเราหน้าเด็ก จบมาตั้ง 10 ปีแล้ว คุยไปคุยมาก็ยังจำเขาไม่ได้อยู่ดี แต่ก็พอจะคุ้นๆบ้าง ... มั๊ง ก็อย่างที่บอก ไม่ค่อยได้เข้าเรียน วิชาที่เข้าเรียนบ่อยก็มีแต่ภาษาอังกฤษที่เรียนร่วมกับคณะวจก.(เพราะสาววจก.เน็กไทสีชมพูนั้นงามนัก^^) นอกนั้นก็เข้าตามเกณฑ์ขั้นต่ำที่ทำให้ยังมีสิทธิ์สอบอยู่ ศุลกากรคนนี้เขาเรียนมอ.แค่ปี 1 ปีเดียว แล้วก็ออกมาเรียนเอกชนที่กรุงเทพ

ตอนปี 1 คณะผมมีเพื่อนร่วมรุ่น 300 กว่าคน แต่เขายังจำผมได้ มีใครอีกบ้างนะที่เขาจำได้ มันเป็นเรื่องมหัศจรรย์จริงๆ กว่าเขาจะมายืนดักผมที่ด่านศุลกากร เขาต้องผ่านการรู้จักคนอื่นอีกกี่คน

แต่มันก็รู้สึกดีนะ เวลามีคนที่เราจำไม่ได้มาทัก นั่นแสดงว่าเรามีตัวตนบนโลกใบนี้ เป็นที่จดจำของใครบางคน มาทักทีก็มาพร้อมกับความทรงจำดีๆที่เคยมีร่วมกัน และความต้องการที่จะสานสัมพันธ์นั้นต่อ

อย่างที่เพลงมันบอก คือเรื่องมหัศจรรย์ ที่เราได้พบกัน บนโลกนี้มีคนตั้งไม่รู้กี่ล้านคน แล้วทำไม 2 คนในหลายล้านนั้นคือผมกับคุณที่รู้จักกัน มันเป็นเรื่องมหัศจรรย์จริงๆ เรื่องมหัศจรรย์ไม่ได้เกิดขึ้นง่ายๆ เราก็ต้องไม่ปล่อยให้มันผ่านไปง่ายๆ จงจดจำมันเอาไว้ให้นานที่สุด

ถึงเพื่อนๆทุกคน "ยินดีที่ได้รู้จักครับ"

Saturday, September 25, 2010

ไม่รู้ใครเป็นใคร

เรื่องแรก

"ตามไม่ทันพี่ ไปถามผู้หญิงคนนั้นเขาบอกไม่ใช่

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

คำว่า"แก่พรรษา" หมายถึงผู้ที่มีอายุงานเยอะกว่า อาวุโสกว่า ทำงานมาก่อน เลยมันจะข่มพนักงานใหม่ได้นิดๆถึงแม้ตำแหน่งจะเท่ากัน

ปกติพนักงานเซเว่นจะเก็บเงินทั้งหมดไว้ในลิ้นชักเครื่องคิดเงิน แต่เงินทอนที่ลูกค้าลืมไว้นั้นพนักงานตั้งไว้บนโต๊ะ คงจะรอลูกค้ากลับมาเอา

ถัดจากเซเว่นไปอีกประมาณ 100 เมตรเป็นคลองแสนแสบ

เรื่องที่ 2

"วันก่อนก็มีคนลืมตังทอน ให้แบงค์ 500 มาเราก็ทอนเศษไปก่อน พอได้เศษเขาก็ไปเลย อีก 400 ยังไม่ได้เอา พอหันหลังไปมันก็ปนกันไปหมด ไม่รู้ใครเป็นใคร" คนขายไก่ทอดเล่าให้ฟังหลังจากทอนเงินค่าข้าวหมกให้ผม

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

"ดีที่ตอนเที่ยงเขากลับมาเอา เขาก็กลัวว่าเราจะจำไม่ได้แล้วไม่ยอมให้เงินทอน เราก็บอกว่าไม่เป็นไร เรารู้อยู่ว่ามีคนลืมเงินทอน ถ้ามีคนกลับมาเอาเงินทอนแค่คนเดียวเราก็ไม่ขาดทุน"

เป็นวิธีคิดที่ดูซื่อๆ ตรงไปตรงมา และสบายใจ

Friday, January 1, 2010

SQL Server: การสร้าง Primary Key แบบ Auto Increment

แค่ใส่ PRIMARY KEY IDENTITY ต่อท้าย Primary Key

ตัวอย่างเช่น ถ้าเป็นการสร้าง table ใหม่

CREATE TABLE [dbo].[Cars]( [CarId] [int] PRIMARY KEY IDENTITY, [CarName] [nvarchar](100) NULL, [CarDate] [datetime] NULL, ) ON [PRIMARY] GO

เวลา insert ก็ไม่ต้องใส่ CarId มาด้วย มันจะ run เลขใหม่ให้เอง

ถ้าจะสร้าง Primary Key ให้กับ table ที่ยังไม่มี primary key ก็ใช้คำสั่ง


ALTER TABLE table1ADD CONSTRAINT PK_table1 PRIMARY KEY (IdColumn)


ถ้าเป็น table ที่มีอยู่แล้ว ต้องการจะเพิ่มฟิลด์ใหม่ให้เป็น primary key แบบ auto increment


Alter table table1 add  [IdColumn] [int] PRIMARY KEY IDENTITY

Saturday, February 23, 2008

SQL Server: ลบ Column ที่ Not Null และมีค่า Default

สำหรับ filed ที่คุณมีการตั้งค่า default ไว้ SQL Server จะไม่ยอมให้ drop โดยตรง เมื่อคุณใช้

alter table Table1 drop column Col1

จะขึ้น error ว่า
Msg 5074, Level 16, State 1, Line 1
The object 'DF__Table1__Col1__35E7E693' is dependent on column 'Col1'.
Msg 4922, Level 16, State 9, Line 1
ALTER TABLE DROP COLUMN Col1 failed because one or more objects access this column.

คุณต้อง

1. แก้ให้ Col1 เป็น null ได้ และไม่มีค่า default
alter table Table1 alter column [Col1] [int] NULL

2. ลบ constraint DF_... ทิ้งไปก่อน
alter table Table1 drop constraint DF__Table1__Col1__1FC39B4A

3. ทีนี้ก็ drop column ได้แล้ว
alter table Table1 drop column Col1

Command(s) completed successfully.