ขอความกระจ่างเกี่ยวกับวันที่ ทีคับ ทำไมมันเก็บค่าเดือนเป็นวันที่ วันที่เป็นเดือน เลยทำไห้เกิด เออเร่อ
มันดันเก็บวันที่เป็นเดือน เดือนเป็นวันที่ทำไห้
แล้วตกลงมันเก็บเป็นอะไรละครับ งง
Date :
2010-11-25 10:03:26
By :
kanchen
เช่นนะคับ จะเก็บข้อมูล เป็น 25 พย 53(25/11/2553)
แต่เหมือนตอนส่งข้อมูลไปที่ดาต้าเบส มันเป็น (11/25/2553) ประมานว่าเดือนมันมีมากสุดแค่ 12 แต่ข้อมูลมันมาเป็น 25 มันก็เออเร่ออ่ะคับ
Date :
2010-11-25 10:12:02
By :
Patzy
ถ้าลง db เป็น ด/ว/ป ก็น่าจะไม่มีปัญหาอะไรครับ แต่อยากได้เป็น ว/ด/ป ลองใช่แต่ .value ดูครับ แต่ถ้าแก้ไขไม่ได้จิงๆ
ตอน select วันที่ออกมาลองใช้ dat1.ToString(System.Globalization.CultureInfo.InvariantCulture) ดูครับ ที่มา
Date :
2010-11-25 10:23:36
By :
kanchen
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
The statement has been terminated.
error อ่ะคับ ผมลองให้ข้อมูลที่จะส่งไปโชว์ดูทาง messagebox มันก็ปกติอ่ะคับ แต่ทำไมมันเออเร่ออ่ะ คับ งงมาก
Date :
2010-11-25 10:45:08
By :
Patzy
ลองเปลี่ยนตรงนี้ดูครับ
Date :
2010-11-25 10:54:53
By :
base3000
กำหนด type เป็น datetime สิครับ
Date :
2010-11-25 10:59:00
By :
kanchen
กำหนดเป็น datetime แล้วคับ
ส่วนภาษาผมลองทั้งสองแบบแล้ว เออเร่อเหมือนกัน(เออเร่อแต่ตอน อัพเดท แต่ตอน insert มันไม่เออเร่ออ่ะคับ)
โค้ด insert
Code (C#)
string sql_PB = "insert into AGENT(A_ID,A_NAMETH,A_NAMEEN,A_PERMIT,A_STARTDATE,A_ENDDATE,A_ADDRESS,P_ID,A_ZIPCODE,A_TEL,A_FAX,A_Email,A_LOGO,A_STATUS,A_LANSELL,IDUSER,A_Website)VALUES(@A_ID,@A_NAMETH,@A_NAMEEN,@A_PERMIT,@A_STARTDATE,@A_ENDDATE,@A_ADDRESS,@P_ID,@A_ZIPCODE,@A_TEL,@A_FAX,@A_Email,@A_LOGO,@A_STATUS,@A_LANSELL,@IDUSER,@A_Website)";
SqlCommand cm = new SqlCommand(sql_PB, CN);
cm.Parameters.AddWithValue("@A_ID", lbid.Text);
cm.Parameters.AddWithValue("@A_NAMETH", tbnameTH.Text);
cm.Parameters.AddWithValue("@A_NAMEEN", tbnameEn.Text.Trim());
cm.Parameters.AddWithValue("@A_PERMIT", tbpermit.Text.Trim());
cm.Parameters.AddWithValue("@A_STARTDATE", dateTimePicker1.Value.Date);
cm.Parameters.AddWithValue("@A_ENDDATE", dateTimePicker2.Value.Date);
cm.Parameters.AddWithValue("@A_ADDRESS", tbadd.Text.Trim());
cm.Parameters.AddWithValue("@P_ID", comboBox1.SelectedValue);
cm.Parameters.AddWithValue("@A_ZIPCODE", tbzipcode.Text.Trim());
cm.Parameters.AddWithValue("@A_TEL", tbtel.Text.Trim() + "-" + maskedTextBox1.Text.Trim());
cm.Parameters.AddWithValue("@A_FAX", tbfax.Text.Trim() + "-" + maskedTextBox2.Text.Trim());
cm.Parameters.AddWithValue("@A_Email", tbmail.Text.Trim());
cm.Parameters.AddWithValue("@A_Website", tbwebsite.Text.Trim());
if (tblogo.Text != "")
{ cm.Parameters.AddWithValue("@A_LOGO", picPath); }
else { cm.Parameters.AddWithValue("@A_LOGO", "\\\\TMT7\\Image_logo\\NOIMAGE.JPG"); }
cm.Parameters.AddWithValue("@A_STATUS", "ON");
cm.Parameters.AddWithValue("@A_LANSELL", tblansell.Text.Trim());
cm.Parameters.AddWithValue("@IDUSER", Login.id);
cm.ExecuteNonQuery();
CN.Close();
DA_Eagent.Update(DS_Eagent, "AgentEmp");
ส่วนนี้โค้ดอัพเดทที่มีปัญหาวันที่
Code (C#)
string sql = "UPDATE Agent SET A_NAMETH ='" + tbnameTH.Text + "'";
sql += ",A_NAMEEN ='" + tbnameEn.Text+ "'";
sql += ",A_PERMIT ='" + tbpermit.Text+ "'";
MessageBox.Show(dateTimePicker1.Value.Date.ToString());
MessageBox.Show(dateTimePicker2.Value.Date.ToString());
sql += ",A_STARTDATE ='" + dateTimePicker1.Value.Date + "'";
sql += ",A_ENDDATE ='" + dateTimePicker1.Value.Date + "'";
sql += ",A_ADDRESS ='" + tbadd.Text + "'";
sql += ",P_ID ='" + comboBox1.SelectedValue + "'";
sql += ",A_ZIPCODE ='" + tbzipcode.Text + "'";
sql += ",A_TEL ='" + tbtel.Text.Trim() + "-" + maskedTextBox1.Text.Trim() + "'";
sql += ",A_FAX ='" + tbfax.Text.Trim() + "-" + maskedTextBox2.Text.Trim() + "'";
sql += ",A_Email ='" + tbmail.Text + "'";
sql += ",A_Website ='" + tbwebsite.Text + "'"; ;
if (tblogo.Text != "")
{
string pathlogo = dataGridView1[15, Iedit].Value.ToString();
if (pathlogo != "\\\\TMT7\\Image_logo\\NOIMAGE.JPG")
{ File.Delete(dataGridView1[15, Iedit].Value.ToString()); }
string filename = "Untitled";
string storePath = "\\\\TMT7\\Image_logo\\";
filename = openFileDialog1.FileName;
FileInfo fileinfo = new FileInfo(filename);
picPath = storePath + lbid.Text + fileinfo.Extension;
File.Copy(tblogo.Text, picPath, true);
sql += ",A_LOGO ='" + picPath + "'";
}
sql += ",A_LANSELL ='" + tblansell.Text + "'";
//sql += ",IDUSER ='" + Login.id + "'";
sql += "where A_ID LIKE '" + lbid.Text + "'";
SqlCommand cm = new SqlCommand(sql, CN);
cm.ExecuteNonQuery();
DA_Eagent.Update(DS_Eagent, "AgentEmp");
Date :
2010-11-25 11:08:24
By :
Patzy
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
The statement has been terminated.
ผมรู้ว่ามันเก็บข้อมูล วันที่เป็นเดือนเพราะว่าผมลองบันทึกข้อมูลที่ไม่เกิน 12 มันไม่เออเร่อ แต่ข้อมูลมันก็ผิดอ่ะคับ เดือนกับวันที่มันสลับกัน -*-
Date :
2010-11-25 11:11:48
By :
Patzy
ส่วน code update ที่ไม่ได้คุณดูที่ where นะครับ ยัง where ผิดอยู่ แล้วเรื่องของรูปแบบวันที่นั้น ตอน insert ให้ลบ .date ของ
datetimepicker แล้วลอง insert ข้อมูลเข้าไปดูครับ ว่าวันที่มันไม่ตรง format ที่ต้องการหรือป่าว
Date :
2010-11-25 11:21:15
By :
kanchen
ตอน insert ใช้ command parameter แต่ update กลับใช้ plain text เขียนไว้นานแล้วหรอคะ
ปัญหานี้น่าจะหมดถ้าใช้ command parameter ด้วยกัน ในตัว sql server ถึงจะ support ภาษาไทย
แต่ก็ไม่ได้ support อะไรมากมายแค่ชื่อวันกับชื่อเดือนเป็นภาษาไทยที่มีให้ แต่ถ้าเป็นใน .net จะ full support กว่าค่ะ
ถึงจะไป set region น่าจะยังไม่จบเพราะ sql server อ่านและจัดเก็บ language setting ด้วยตัวเอง
ใช้ command parameter ตามที่คุณใช้แล้วผ่านเพราะเป็นการอ่านค่าเอาจาก datetime structure ที่รูปแบบแน่นอน
ส่วน plain text ที่ไม่ผ่านเนื่องจาก conflict ของ format วันเดือนปีค่ะ
เพื่อทดสอบคุณลอง query นี้ดูที่ sql server
SELECT @@Language;
ปกติจะเป็น us_english ค่ะ
และถึงคุณจะ SET lanaguage ภายใน sql server ให้เป็นภาษาไทยแต่
date time ที่ return ออกมาจะเป็น >> 25 พ.ย. 2010 แทนที่จะเป็น 25 พ.ย. 2553
ฉะนั้นถ้าต้องการใช้ วันเวลาแบบภาษาไทยควรเก็บตาม format datetime ไปแล้ว cast ตอน output จะดีกว่ามังคะ
ประวัติการแก้ไข 2010-11-25 11:58:29 2010-11-25 11:59:11
Date :
2010-11-25 11:52:46
By :
blurEyes
มือใหม่อ่ะคับ ศึกษาจากทาง net อ่ะคับไม่มีคนแนะนำโดยตรง โค้ดไหนใช้ แก้ไขแล้วไม่เออเร่อเลยยึดติดโค้ดนั้นมาใช้งานอ่ะคับ
ขอบคุณมากนะคับ จะลองทำแบบ command parameter อย่างที่คุณ Stupid.gurl.th แนะนำ
Date :
2010-11-25 12:24:19
By :
Patzy
ไม่รู้เกี่ยวกันป่าวนะครับ อิๆๆ
insert into x(v)
values(convert(datetime,@myd,112))
โดยที่ค่า @myd = yyyyMMdd นะครับ แล้วก็เวลา ประกาศparameter ให้ เป็น type varchar นะครับไม่ต้องเป็น datetime
แต่ว่าค่า field v ใน db เป็น datetime นะครับ
โดยค่า yyyy ให้เป็น คศ จะดีที่สุดครับ ไม่ต้องสนใจว่าเวลา query จะเห็นเป็น พ.ศ. หรือ ค.ศ. นะครับ
อิๆๆ ไม่รู้เรื่องเดียวกันอะป่าว อิๆๆ
Date :
2010-11-25 13:08:11
By :
mahapali
ตอบความคิดเห็นที่ : 10 เขียนโดย : blurEyes เมื่อวันที่ 2010-11-25 11:52:46
รายละเอียดของการตอบ ::
ขอบคุณครับ สำหรับคำแนะนำ เป็นเพราะผมใช้ plain text มันเลยส่งค่าไปผิดอ่ะคับ ผมก็สงสัยอยู่แระ ทำไมต้อง insert มันส่งค่าได้ปกติ แล้วพออัพเดทดันเออเร่อ
ปลเพิ่งเคยได้ยินคำว่า plain text ก็ตอนนี้แหละ
เผื่อคนอื่นหลงมาแบบผม อิอิ
Code (C#)
string sql_PB = "update AGENT set A_NAMETH=@A_NAMETH,A_NAMEEN=@A_NAMEEN,A_PERMIT=@A_PERMIT,A_STARTDATE=@A_STARTDATE,A_ENDDATE=@A_ENDDATE,A_ADDRESS=@A_ADDRESS,P_ID=@P_ID,A_ZIPCODE=@A_ZIPCODE,A_TEL=@A_TEL,A_FAX=@A_FAX,A_Email=@A_Email,A_Website=@A_Website,A_LOGO=@A_LOGO,A_LANSELL=@A_LANSELL where A_ID LIKE'" + lbid.Text + "'";
SqlCommand cm = new SqlCommand(sql_PB, CN);
cm.Parameters.AddWithValue("@A_NAMETH", tbnameTH.Text);
cm.Parameters.AddWithValue("@A_NAMEEN", tbnameEn.Text.Trim());
cm.Parameters.AddWithValue("@A_PERMIT", tbpermit.Text.Trim());
cm.Parameters.AddWithValue("@A_STARTDATE", dateTimePicker1.Value.Date);
cm.Parameters.AddWithValue("@A_ENDDATE", dateTimePicker2.Value.Date);
cm.Parameters.AddWithValue("@A_ADDRESS", tbadd.Text.Trim());
cm.Parameters.AddWithValue("@P_ID", comboBox1.SelectedValue);
cm.Parameters.AddWithValue("@A_ZIPCODE", tbzipcode.Text.Trim());
cm.Parameters.AddWithValue("@A_TEL", tbtel.Text.Trim() + "-" + maskedTextBox1.Text.Trim());
cm.Parameters.AddWithValue("@A_FAX", tbfax.Text.Trim() + "-" + maskedTextBox2.Text.Trim());
cm.Parameters.AddWithValue("@A_Email", tbmail.Text.Trim());
cm.Parameters.AddWithValue("@A_Website", tbwebsite.Text.Trim());
if (tblogo.Text != "")
{ cm.Parameters.AddWithValue("@A_LOGO", picPath); }
else { cm.Parameters.AddWithValue("@A_LOGO", "\\\\TMT7\\Image_logo\\NOIMAGE.JPG"); }
cm.Parameters.AddWithValue("@A_LANSELL", tblansell.Text.Trim());
cm.ExecuteNonQuery();
CN.Close();
DA_Eagent.Update(DS_Eagent, "AgentEmp");
Date :
2010-11-25 15:12:23
By :
Patzy
ไคเคยหลอนแบบผมใช้โค้ด แบบ paramiter แบบด้านบน ปัญหาก็หมดครับ
ขอบคุณสำหรับทุกคำแนะนำนะคับ ขอบคุณมากๆคับ กระจ่างสักที งงกับวันที่มาหลายโปรเจคละ อิอิ
Date :
2010-11-25 15:18:29
By :
Patzy
ยังไงโปรเจ็คหน้า ลองหัดใช้
SqlDataAdapter หรือไม่ก็ TableAdapter
ช่วยในการบันทึกข้อมูลนะ
ชีวิตจะง่ายขึ้น
ไม่ต้องเขียน Code เยอะๆ แบบนี้
Date :
2010-11-25 15:30:02
By :
watcharop
ขอบคุณครับคุณ wartrop ที่แนะนำ ผมก็หาสูบโค้ดไปเรื่อยอ่ะอิอิ อันไหน สั่นๆ เข้าใจง่าย ผมก็เลือกใช้แบบนั้น
ส่วนศัพท์ทางการนี่ ผมไม่รู้เรื่องเลย 555 อาศัยความเข้าใจกับอ่านกระทู้ชาวบ้านเอา
Date :
2010-11-25 15:39:51
By :
Patzy
ตอบความคิดเห็นที่ : 16 เขียนโดย : blurEyes เมื่อวันที่ 2010-11-25 15:35:10
รายละเอียดของการตอบ ::
มันก็จริง Code โดยภาพรวม (Code ในภาพรวมหมายถึง Code ที่ VS ทำให้+Code ที่เราเขียนเอง)
ไม่สั้นลง แต่อย่างน้อย Code ที่เราต้องเขียนเอง มันสั้นลงแน่นอน
อย่าง Code ข้างล่างนี้ VS จัดการให้หมด ผ่อนแรงไปเยอะ
Code (VB.NET)
string sql_PB = "update AGENT set A_NAMETH=@A_NAMETH,A_NAMEEN=@A_NAMEEN,A_PERMIT=@A_PERMIT,A_STARTDATE=@A_STARTDATE,A_ENDDATE=@A_ENDDATE,A_ADDRESS=@A_ADDRESS,P_ID=@P_ID,A_ZIPCODE=@A_ZIPCODE,A_TEL=@A_TEL,A_FAX=@A_FAX,A_Email=@A_Email,A_Website=@A_Website,A_LOGO=@A_LOGO,A_LANSELL=@A_LANSELL where A_ID LIKE'" + lbid.Text + "'";
SqlCommand cm = new SqlCommand(sql_PB, CN);
cm.Parameters.AddWithValue("@A_NAMETH", tbnameTH.Text);
cm.Parameters.AddWithValue("@A_NAMEEN", tbnameEn.Text.Trim());
cm.Parameters.AddWithValue("@A_PERMIT", tbpermit.Text.Trim());
cm.Parameters.AddWithValue("@A_STARTDATE", dateTimePicker1.Value.Date);
cm.Parameters.AddWithValue("@A_ENDDATE", dateTimePicker2.Value.Date);
cm.Parameters.AddWithValue("@A_ADDRESS", tbadd.Text.Trim());
cm.Parameters.AddWithValue("@P_ID", comboBox1.SelectedValue);
cm.Parameters.AddWithValue("@A_ZIPCODE", tbzipcode.Text.Trim());
cm.Parameters.AddWithValue("@A_TEL", tbtel.Text.Trim() + "-" + maskedTextBox1.Text.Trim());
cm.Parameters.AddWithValue("@A_FAX", tbfax.Text.Trim() + "-" + maskedTextBox2.Text.Trim());
cm.Parameters.AddWithValue("@A_Email", tbmail.Text.Trim());
cm.Parameters.AddWithValue("@A_Website", tbwebsite.Text.Trim());
if (tblogo.Text != "")
{ cm.Parameters.AddWithValue("@A_LOGO", picPath); }
else { cm.Parameters.AddWithValue("@A_LOGO", "\\\\TMT7\\Image_logo\\NOIMAGE.JPG"); }
cm.Parameters.AddWithValue("@A_LANSELL", tblansell.Text.Trim());
cm.ExecuteNonQuery();
Date :
2010-11-25 15:54:30
By :
watcharop
แนะนำรูปแบบการใช้งานโค้ดที่สั้นกว่านี้เลยได้ไม๊คับ ^^
โค้ดตัวอย่างเลยอ่ะคับ เพราะผมนึกภาพไม่ออก(ทำไม่เป็น)
ปล.ที่ผมใช้โค้ดแบบนี้ ไม่ใช่ว่าเพราะผมเลือกใช้ แต่เป็นเพราะผมรู้วิธีแบบนี้อย่างเดียวอ่ะ
Date :
2010-11-25 16:04:34
By :
Patzy
ตัวอย่างการใช้ SqlCommandBuilder+SqlDataAdapter
เพื่อบันทึกข้อมูล
http://support.microsoft.com/kb/308055/th
เว็บนี้อธิบายได้ละเอียดดี เนื้อหาเยอะ และโชคดีเป็นภาษาไทย อิอิ
อาจจะเสียเวลาสักหน่อย แต่รับรองว่าคุ้ม
Date :
2010-11-25 16:19:13
By :
watcharop
Load balance : Server 03