Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL在预订系统中的应用_C#_Asp.net_Sql_Postgresql - Fatal编程技术网

C# SQL在预订系统中的应用

C# SQL在预订系统中的应用,c#,asp.net,sql,postgresql,C#,Asp.net,Sql,Postgresql,我正在使用C#和postgreSQL数据库构建一个asp.net应用程序。该应用程序是医生办公室的预约系统 我有下表预约: 我有下表的时间: 两个表中的列时间之间存在关系(tbl_约会中的时间是tbl_时间中的外键) 在应用程序中,我有一个下拉列表,如下所示。用户首先选择医生,然后选择日期,然后单击下拉列表选择时间。带有时间的下拉列表从数据库tbl_times加载 现在我的问题是: 如何编写SQL以只加载没有预约的时间? 如果用户首先选择Dr D,然后选择日期2014-04-23,则在下拉

我正在使用C#和postgreSQL数据库构建一个asp.net应用程序。该应用程序是医生办公室的预约系统

我有下表预约:

我有下表的时间:

两个表中的列时间之间存在关系(tbl_约会中的时间是tbl_时间中的外键)

在应用程序中,我有一个下拉列表,如下所示。用户首先选择医生,然后选择日期,然后单击下拉列表选择时间。带有时间的下拉列表从数据库tbl_times加载

现在我的问题是: 如何编写SQL以只加载没有预约的时间? 如果用户首先选择Dr D,然后选择日期2014-04-23,则在下拉列表中,我希望加载tbl_times中除08:00和10:00之外的所有时间

更新: 我的问题是如何排除记录。 我尝试过这种SQL(当然我不想写这些值):


好的,所以我想出了解决办法。我就是这样做的:

            conn.Open();
            NpgsqlCommand command = new NpgsqlCommand("SELECT time FROM tbl_time WHERE time NOT IN (SELECT time FROM tbl_appointment Where doctor = '" + doc + "' AND date = '" + date + "')", conn);  
            NpgsqlDataReader dr = command.ExecuteReader();
            while (dr.Read())
            {
                ddTime.Items.Add(DateTime.Parse(dr["time"]ToString()).ToShortTimeString());
            }

你让自己的生活很艰难,因为你没有医生的桌子。我也会有一个DateTime列,而不是日期和时间。我的建议是:

select t.DateTime, d.Name from times t
cross join doctors d
left join Appointments a on t.DateTime = a.DateTime and d.DoctorID = a.DoctorID
where a.ID is null
这会给你一份所有医生免费预约的名单


正如我在评论中提到的,你需要仔细阅读。目前,您的代码非常容易受到攻击。

当然不会。我的问题是,我不知道如何在SQL语句中排除记录。请参阅我更新的sql帖子。尝试左连接和where appoints.ID为null。首先,也是最重要的是,您的代码容易受到sql注入攻击。这是非常重要的。”“单据”和“日期”必须是参数。我不相信你真的回答了这个问题。在你的原稿中,你问过如何找到空闲时间?在这里,你要经过一个特定的时间来匹配?第三,如果它以DateTime的形式出现,请将其保留为DateTime,除非您确实需要,否则不要将其转换为字符串()。这将帮助你做一些事情,比如计算到未来约会的时间。如果你愿意,我会试试你的解决方案。
select t.DateTime, d.Name from times t
cross join doctors d
left join Appointments a on t.DateTime = a.DateTime and d.DoctorID = a.DoctorID
where a.ID is null