我正在尝试使用 sql select & vb .net 执行下一个语句

Posted

技术标签:

【中文标题】我正在尝试使用 sql select & vb .net 执行下一个语句【英文标题】:I'm trying to next statements using sql select & vb .net 【发布时间】:2011-11-01 04:26:30 【问题描述】:

我在 pvp 中使用 while 循环做过类似的事情,但我认为这对 vb 无效。我总共有 4 个表,其中 3 个基于 1 个。

Main Table:
weather

Sub Tables:
applicationData
accidentData
trafficData

我的目标是使用我的过滤系统来检查天气数据表。然后,它根据天气数据字段的位置、日期和时间在其他表中搜索交通、事故和应用程序数据。 (他们都共享这些列)。有时每个日期/时间/地点都会发生多起事故。

为了更容易解释,我希望你用两个不同的表来解释它,所以这里是我的查询。

SELECT event, date, time, location 
FROM weather 
WHERE date= '" & datepicker.Text & "' 
AND time = '" & eventTime.SelectedItem.Value & "'

然后我想获取日期、时间和位置,并使用该信息搜索其中一个子表。

SELECT roadway_number, mile_marker 
FROM  accident 
WHERE date= 'query1Date' 
AND time = 'query1Time' 
AND location = 'query1Location'

我想在数据网格中显示所有这些信息,并让它显示所有天气字段,即使没有事故数据。像这样:

10 年 12 月 1 日下午 1 点,友好 天气事件:雪

10 年 12 月 1 日下午 2 点,友好 天气事件:小雨

下午 5 点,2010 年 12 月 1 日 天气事件:大雪 意外: 道路:I165N,Mile_Marker 95.5 道路:I165N,Mile_Marker 71

晚上 7 点,2010 年 12 月 1 日 天气事件:大雪 意外: 道路:I165S,Mile_Marker 85.5

非常感谢您的帮助!

【问题讨论】:

这段代码容易受到sql注入的攻击。不酷。 【参考方案1】:

不要在循环中查询数据库(真正的性能杀手),而是在查询中加入表:

SELECT weather.event, weather.date, weather.time, location,
    accident.roadway_number, accident.mile_marker
FROM weather
LEFT OUTER JOIN accident on weather.date = accident.date and weather.time = accident.time
    and weather.location = accident.location
WHERE date= '" & datepicker.Text & "' AND time = '" & eventTime.SelectedItem.Value & "'

无论是否发生相关事故,OUTER 连接都是获取所有天气记录的关键。

您还应该考虑对查询进行参数化,而不是连接输入值。

【讨论】:

我试图将它用于我的应用程序数据(位置实际上称为 tmc) SELECT weather.event, weather.date, weather.time, weather.tmc, application.weather, application.surface_temperature FROM weather LEFT OUTER JOIN application on weather.date = application.date and weather.time = application.time and weather.tmc = application.tmc WHERE weather.date= '" & datepicker.Text & "' 我用数据列表事件显示它并且天气时间显示,但应用程序数据不显示(无错误) 我知道我的问题是什么。我的 csv 文件在我的单元格末尾放置了中断,所以它没有找到完全匹配的东西....我用 % “喜欢”并且它起作用了.. 必须修复我的 csv -> mysql 转换。谢谢!【参考方案2】:

您应该能够为此使用左外连接:

SELECT w.event, w.date, w.time, w.location, a.roadway_number, a.mile_marker 
FROM weather w
LEFT OUTER JOIN accident a ON a.date = w.date 
                          AND a.time = w.time
                          AND a.location = w.location
WHERE w.date= '" & datepicker.Text & "' 
AND w.time = '" & eventTime.SelectedItem.Value & "'

【讨论】:

我遇到了同样的问题,就像我对你之后的人的回应所做的那样。天气表数据显示,但事故没有。我正在使用数据列表和 时间:,事件:天气:, Surface Temperature: 我尝试使用 a.roadway_number 但执行此操作时出现错误 我知道我的问题是什么。我的 csv 文件在我的单元格末尾放置了中断,所以它没有找到完全匹配的东西....我用 % “喜欢”并且它起作用了.. 必须修复我的 csv -> mysql 转换。谢谢!

以上是关于我正在尝试使用 sql select & vb .net 执行下一个语句的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL Developer 中的 Varchar2 变量

使用动态 sql 为 select 语句创建列

Proc Sql Select Into 正在创建一个我无法调用的临时变量

优化 Sql Query 去掉 SELECT 子句并使用 JOIN

如何在 PL/SQL CURSOR 中将参数作为输入?

SSIS MySQL ADO.net SQL 任务输入和输出