คนเรามันก็เหมือนกิ้งก่า อยู่ที่ไหนก็เปลี่ยนไปตามนั้น (จริง ๆ ก็คือทำเสร็จแล้วลืมนั่นเอง เจอของเก่าเขาทำไว้ไงก็ทำงั้น)
จริง ๆ ผมก็เคยเขียน code แบบนี้มาตั้งนานละ แต่ก็ลืม ๆ ไปเพราะว่าที่ทำงานที่นี่ Programmer ส่วนใหญ่เวลาจะเขียน Query ก็เอา String เชื่อม ๆ ต่อ ๆ กับ Value จนได้ Query มาชุดนึง แล้วก็เอาไป Query

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

หรือจะเขียน Store Procedure เอ แล้วถ้าไม่มีสิทธิ์ล่ะ แล้วถ้าเขียน Store Procedure ไม่เป็นล่ะ (จริง ๆ อันนี้แหล่ะเหตุผลจริง ๆ ของผม)

วุ่นวาย ๆ ปวดหมอง ๆ

ก็เลยแนะนำวิธีนี้ละกัน

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SqlConnection conn = new SqlConnection(ConnectionString);
 
//เขียน Query แล้วก็ใส่ @ชื่อparam แทน Parameter ที่จะใช้
string sql = "SELECT * FROM MyTable "
           + "WHERE Name=@name AND RegisDate=@regisdate";
 
SqlCommand cmd = new SqlCommand(sql, conn);
 
//ก็ Add parameter ก่อน โดย ชื่อก็จะขึ้นต้นด้วย @ 
//แล้วก็เหมือนกับที่เราเขียนใน sql query ด้านบน แล้วก็ระบุ Type ด้วยนะ
cmd.Parameters.Add("@name", SqlDbType.VarChar);
cmd.Parameters.Add("@regisdate", SqlDbType.DateTime);
 
//จากนั้นก็กำหนดค่ามันลงไป ตาม Type นั้น ๆ 
//จะเป็น DateTime หรืออะไรก็ใส่กันไปโต้ง ๆ เลย
cmd.Parameters["@name"].Value = 'Krucode';
cmd.Parameters["@regisdate"].Value = DateTime.Now;
 
// อ่ะ ก็เอา Data ไปใช้
SqlDataAdapter mydata = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
mydata.Fill(ds, "CL");

มันจะช่วยแก้ปัญหาเรื่อง DateTime ได้ชะงัดนัก
จริง ๆ ผมเชียร์ให้เขียน code แบบนี้นะ ดีกว่าเขียนเชื่อม string แบบ

1
2
string sql = "SELECT * FROM MyTable "
           + "WHERE Name='"+Krucode+"' ORDER BY NAME";

นะ แก้ลำบาก

สู้ ๆ o.O!