想要检查ASP.NET中oracle数据库的starttime和endtime列中是否已存在输入的starttime和endtime

时间:2015-06-01 10:12:56

标签: c# asp.net oracle validation datetime

想要检查在弹出窗口中输入的starttime和endtime文本框是否已存在于starttime& ASP.NET中oracle数据库表中的endtime列

我正在进行日常活动管理,用户输入在该特定日期完成的每项活动。

例如:如果用户输入Startime 16:15和Endtime 17:30,则应检查DB以及同一用户是否已在同一日期和时间(Starttime 16:16和Endtime 17:31)输入活动

它不应该接受并显示错误/警告,例如“已经在给定时间内存在活动”

我想在按钮点击弹出窗口并使用每个框的点击事件的相同弹出窗口形式发生此检查.plz见下面的URL

http://postimg.org/image/v6qrhb06h/

在oracle中将starttime和endtime声明为varchar

我试过下面的查询

select * from activities 
 where starttime between +TextBox1.Text+ 
       and +TextBox2.Text+ 
 and endtime between +TextBox1.Text+ and +TextBox2.Text+

列和值 用户电子邮件activityname acticvitydescp starttime endtime activitydate xys xyz@abc.com XYZ完成了等等09:45 11:00 04-MAY-15

它不能满足我的要求

2 个答案:

答案 0 :(得分:1)

 "select * from activities 
 where (to_date(starttime,'HH:MI') between 
 to_date('"+TextBox1.Text+ "','HH:MI') 
 and to_date('"+TextBox2.Text+ "','HH:MI') )
 OR (to_date(endtime,'HH:MI') between 
 to_date('"+TextBox1.Text+ "','HH:MI') 
 and to_date('"+TextBox2.Text+ "','HH:MI'))"

由于您将日期存储为varchar,因此需要使用to_date()函数进行转换:如果以24小时格式节省时间,请使用 HH24

注意:也总是选择能避免sql注入问题的参数化查询

create table time1
(starttime varchar(20),
 endtime varchar(20)
 );

 insert into time1 values ('16:30','17:45');
 insert into time1 values ('16:32','17:45');
 insert into time1 values ('17:45','18:00');

select * from time1
where to_date(starttime,'hh24:mi') 
between to_date('16:30','hh24:mi') 
and to_date('17:45','hh24:mi') 
and to_date(endtime,'hh24:mi') 
between to_date('16:30','hh24:mi') 
and to_date('17:45','hh24:mi');

STARTTIME   ENDTIME
16:30       17:45
16:32        17:45

答案 1 :(得分:0)

我不是oracle专家,但要在你之间使用,理想情况下应该将字段设为datetimes而不是VARCHAR。

然后,一旦你这样做,你可以写一个简单的查询,如:

"select * from activities 
 where (starttime between '" + TextBox1.Text + "' and '" + TextBox2.Text + "')"
 OR (endtime between '" + TextBox1.Text + "' and '" + TextBox2.Text + "')";

我更改了添加了OR而不是AND,因为我发现您对重叠感兴趣。