 |
|
C# ถามเรื่อง insert ข้อมูล แบบมีเงื่อนไขซ้ำค่ะ (asp.net) |
|
 |
|
|
 |
 |
|
ปัญหาก็คือจะต้องส่ง Format ให้ถูกน่ะครับ ใช้ BETWEEN ใน DateTime ก็จะต้องตรวจสอบว่าฟิวด์มันเป็น DateTime หรือไม่
|
 |
 |
 |
 |
Date :
2012-05-21 06:28:46 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณค่ะ
หมายถึงว่า
string Tin = DropDownList2.Text;
string Tout = DropDownList3.Text;
ต้องformat ตรงนี้ให้เป็น datetimeหรอคะ หรือยังไง
|
 |
 |
 |
 |
Date :
2012-05-21 08:51:47 |
By :
biw |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าฟิวด์เป็น DateTime มันสามารถ Compare เวลาได้ด้วยครับ เพียงแค่ส่ง Format ให้ถูกครับ
|
 |
 |
 |
 |
Date :
2012-05-21 20:54:50 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Compare 2ตัวนี้หรือเปล่าคะ DropDownList2.SelectedValue กับ DropDownList3.SelectedValue
|
 |
 |
 |
 |
Date :
2012-05-21 21:44:30 |
By :
biw |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อธิบายหน่อยได้มัย้คะ ไม่เข้าใจจริงๆ 
|
 |
 |
 |
 |
Date :
2012-05-22 09:19:57 |
By :
biw |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ที่ว่า แต่ก็มีปัญหาคือ
มีเวลาในฐานข้อมูลคือ 8.00 ถึง 12.00
ต้องการ จะ insert เวลา 12.00 ถึง 15.00 แต่ insertเข้าไปไม่ได้ค่ะ
ผมคิดว่าเป็นที่เวลาที่เราบันทึกเข้าไปเก็บด้วยนะครับ
ผมไม่แน่นะว่า แต่คิดว่าคุณน่าจะเก็บข้อมูลแบบนี้
timein >> 08:00:00 AM , timeout >> 12:00:00 PM
แต่ที่ผมทำคือจะแก้ค่าของเวลาก่อนบันทึกเข้าไป เป็นแบบนี้ครับ
timein >> 08:00:01 AM , timeout >> 12:00:00 PM *ตอนแสดงก็ค่อยแปลงให้สวยอีกที
ผมแถม Stored Procedure ที่เอาไว้เช็คการจองห้องซ้ำให้ด้วย คิดว่าน่าจะครอบคลุมเงื่อนไขมากกว่าครับ
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[spChkroomForAdd]
@Room varchar(10),
@Starttime datetime,
@Endtime datetime
AS
BEGIN
SET NOCOUNT ON;
SELECT room, starttime, endtime,reserve_by
FROM reservati0n
WHERE (ROOM=@ROOM AND (CONVERT(VARCHAR(19),@Starttime,120) BETWEEN starttime AND endtime OR
CONVERT(VARCHAR(19),@Endtime,120) BETWEEN starttime AND endtime ))
OR (ROOM=@ROOM AND @Endtime > endtime AND @Starttime < starttime)
END
|
 |
 |
 |
 |
Date :
2012-05-22 09:51:08 |
By :
Nebula |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณค่ะ จะลองทำดูนะคะ
|
 |
 |
 |
 |
Date :
2012-05-22 10:32:33 |
By :
biw |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ได้แล้วค่ะ
ระบบที่่ทำ เป็นระบบจัดตารางสอน
มันมีการเก็บค่า วันด้วย (จันทร์-ศุกร์)
ได้insert ข้อมูล
วันจัน เวลา 8:30 - 12:30
แต่พอ
จะ insert ข้อมูล
วันอังคาร เวลา 8:30 - 12:30
มันinsertเข้าไปไม่ได้
ตอนนี้เขียนแบบนี้อยู่ค่ะ แต่มันก็ยังinsertไม่ได้
Code (C#)
sql = "SELECT COUNT(*) FROM dataschedule1 where date ='" + textBox1.Text+ "' and '" + DropDownList2.SelectedValue + "' between timein and timeout or '" + DropDownList3.SelectedValue + "' between timein and timeout and '" + DropDownList3.SelectedValue + "'))";
พอจะมีวิธีแก้ไขบ้างมั้ยคะ
|
 |
 |
 |
 |
Date :
2012-05-22 10:47:48 |
By :
biw |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
งึม ๆ ถ้าเป็นอย่างนี้ก็อย่างที่พี่วินบอกนะครับ คือเก็บแบบ datetime แล้วโยน format ที่ถูกต้องไปให้มันตอนตรวจสอบ
เพราะจาก code แล้วมันผมว่ามันเอาทั้งวันที่ ทั้งเวลามาด้วยครับ
ถ้ายังไงขอดูตาราง dataschedule1 ได้มั้ยครับ ว่าเก็บอะไร เก็บยังไงบ้าง
ถ้าเป็นผมคงทำประมาณนี้
dataschedule1(xxPK, Day, timein, timeout, TeacherID, RoomID, SubjectID) >> จะได้ประมาณนี้
(1, Monday, 2012/05/22 08:00:01 AM, 2012/05/22 10:00:00 AM, 2, 7, 001) มีตาราง teacher , room , subject ไว้อ้างอิงอะไรก็ว่าไป
แล้วก็ค้นหาประมาณนี้
*dropdownlistDay >> ddlDay มี (mon,tue,...,fri)
ddltimein.SelectedValue , ddltimeout.SelectedValue >> dropdownlist ค่าเวลา 08:01 AM , 08:30 AM , ..... อะไรก็ว่าไป
Code
SELECT * FROM dataschedule1
WHERE (Day='ddlDay.SelectedValue' AND (CONVERT(VARCHAR(19),ddltimein.SelectedValue ,108) BETWEEN timein AND timeout OR
CONVERT(VARCHAR(19),ddltimeout.SelectedValue ,108) BETWEEN timein AND timeout ))
OR (Day=ddlDay.SelectedValue AND ddltimeout.SelectedValue > timeout AND ddltimein.SelectedValue < timein)
คิดว่าต้อง convert ddltimein.SelectedValue , ddltimeout.SelectedValue , timein , timeout ให้เป็นแบบ hh:mm:ss ทั้งหมดเลยครับเพราะเราเอาแค่เวลามาเปรียบเทียบร่วมกับ ddlDay แล้วค่อยควบห้องเข้าไปอีกทีเพราะโรงเรียนคงไม่ได้มีแค่ห้องเดียว
format hh:mm:ss ใช้ convert แบบนี้ครับ convert(varchar, getdate(), 108)
"http://www.technoreader.com/SQL-Server-Date-Time-Format.aspx"
ผมไม่ได้ลองนะว่า code ผมมัน OK รึเปล่า แต่คิดว่าน่าจะพอปรับ ๆ ให้ใช้ได้ครับ
ปล. ลองทำใน sql managment studio ดูครับ new query ขึ้นมา จะเร็วกว่าทำที่ฟอร์มจริง ๆ (มั้ง)
|
 |
 |
 |
 |
Date :
2012-05-22 11:57:28 |
By :
Nebula |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าเพิ่ม ห้องเรียน ลงไป
เช่น
ห้อง001 เวลา 8:00-12:00
แล้วจะinsert
ห้อง002 เวลา 8:00-12:00
มันก็ไม่ได้อ่ะค่ะ 
เหมือนมันล็อก 8:00-12:00 ไม่ให้insert
แบบนี้เราต้องแก้ไขที่ format เวลาเหรอคะ
|
 |
 |
 |
 |
Date :
2012-05-22 12:17:03 |
By :
biw |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ดีใจด้วยครับ 
|
 |
 |
 |
 |
Date :
2012-05-22 13:09:22 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มันอยู่คู่พวกเราเสมอครับ ปัญหา datetime นี่แต่ก็สนุกดีครับ โฮะ ๆ ๆ 
|
 |
 |
 |
 |
Date :
2012-05-22 13:52:22 |
By :
Nebula |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|