VB.NET 中的 SQL 选择查询
Posted
技术标签:
【中文标题】VB.NET 中的 SQL 选择查询【英文标题】:SQL Select query in VB.NET 【发布时间】:2021-09-02 12:34:58 【问题描述】:我想使用选择查询从数据库中提取一些内容。我已经在 SQL Server 管理工作室中编写了我需要的查询,它可以工作。我试着把它复制进去,但它不起作用。我有一些其他的查询确实有效,我试图让它像那些一样格式化,但它只会把它看作字符串,因为它在“”这些东西之间。 下面是查询,它使用了 vb.net 似乎无法识别的连接函数。该查询还使用了来自数据库其他部分的某些表,这些表似乎也没有被识别。
查询:
select th.Thickness, count(th.Thickness)
from dbname..trackinghistory th
join dbname..OrderDetailOptions odo on odo.odKey=th.odKey
join dbname..MasterPartOptions mpo on mpo.Code=odo.OptionCode and mpo.[Group]=odo.optiongroup
and mpo.QuestionKey='KGLASS' and OptionType=5
where th.DateTime>DATEADD(DAY,-4,getdate()) and th.Code='__A__' and th.StationID='HO4' and
left(odo.OptionCode,1) = 'H'
group by th.Thickness
我想我只需要朝着正确的方向前进,这里有人可以帮助我如何正确格式化这些类型的查询吗?
我的 VB.Net 代码:
Sub SetButtonColor()
btnIsClicked = False
Dim iWeek As Integer = tbWeek.Text
Dim iYear As Integer = tbYear.Text
If sql.hasconnection And iWeek <> 0 Then
Dim dtimeStartDate As DateTime = GetWeekStartDate(tbWeek.Text, tbYear.Text) 'get the startdate from the textboxes week and year
Dim dtimeEndDate As DateTime = DateAdd(DateInterval.Day, 7, dtimeStartDate) 'add 7 days to the startdate to set the enddate
sql.runquery("SELECT th.Thickness, count(th.Thickness)" +
"from FVMASTER..trackinghistory th" +
"join FVMASTER..OrderDetailOptions odo on odo.odKey=th.odKey" +
"join FVMASTER..MasterPartOptions mpo on mpo.Code=odo.OptionCode and mpo.[Group]=odo.optiongroup and mpo.QuestionKey='KGLASS' and OptionType=5" +
"where th.DateTime>DATEADD(DAY,-4,getdate()) and th.Code='__A__' and th.StationID='HO4' and left(odo.OptionCode,1) = 'H'" +
"group by th.Thickness")
If sql.sqldataset.Tables(0).Rows.Count > 0 Then
For Each row As DataRow In sql.sqldataset.Tables(0).Rows
Select Case row("Thickness")
Case 3
btn3.BackColor = Color.Red
Case 4
btn4.BackColor = Color.Red
Case 5
btn5.BackColor = Color.Red
Case 6
btn6.BackColor = Color.Red
Case 8
btn8.BackColor = Color.Red
Case 10
btn10.BackColor = Color.Red
Case 12
btn12.BackColor = Color.Red
Case 15
btn15.BackColor = Color.Red
Case 19
btn19.BackColor = Color.Red
Case 24
btn24.BackColor = Color.Red
End Select
Next
End If
结束子
我现在只是粘贴在查询中,我知道那行不通
【问题讨论】:
上述查询的 VB.NET 形式是什么? 您需要使用SqlClient
或等效项。您不能只在 .NET
应用程序中键入 SQL 查询...
你能发布你实际的 VB.NET 尝试吗?如果您真的尝试“只是将其复制进去”,那将永远行不通。
@WSC 有一个 SQLClient 文件,但由于我不熟悉这个,我不太了解它。
发布连接数据库的代码。似乎你连最基本的教育自己如何做到这一点都没有完成。请做一些研究...这是一个很好的起点:mssqltips.com/sqlservertip/5677/…
【参考方案1】:
问题是 SQL 字符串中缺少空格。仅仅因为连接的字符串在不同的行上,这不会给字符串添加换行符。
例如,
"from FVMASTER..trackinghistory th" +
"join FVMASTER..OrderDetailOptions odo on odo.odKey=th.odKey"
结果
"from FVMASTER..trackinghistory thjoin FVMASTER..OrderDetailOptions odo on odo.odKey=th.odKey"
如您所见,您会在其中看到一个thjoin
,它应该是th join
。
只需将其编写为单个 multiline string(现在包括换行符)
sql.runquery("SELECT th.Thickness, count(th.Thickness)
from FVMASTER..trackinghistory th
join FVMASTER..OrderDetailOptions odo on odo.odKey=th.odKey
join FVMASTER..MasterPartOptions mpo on mpo.Code=odo.OptionCode and mpo.[Group]=odo.optiongroup and mpo.QuestionKey='KGLASS' and OptionType=5
where th.DateTime>DATEADD(DAY,-4,getdate()) and th.Code='__A__' and th.StationID='HO4' and left(odo.OptionCode,1) = 'H'
group by th.Thickness")
或者,您可以保留原来的方法并在行尾添加缺少的空格
sql.runquery("SELECT th.Thickness, count(th.Thickness) " +
"from FVMASTER..trackinghistory th " +
"join FVMASTER..OrderDetailOptions odo on odo.odKey=th.odKey " +
"join FVMASTER..MasterPartOptions mpo on mpo.Code=odo.OptionCode and mpo.[Group]=odo.optiongroup and mpo.QuestionKey='KGLASS' and OptionType=5 " +
"where th.DateTime>DATEADD(DAY,-4,getdate()) and th.Code='__A__' and th.StationID='HO4' and left(odo.OptionCode,1) = 'H' " +
"group by th.Thickness")
【讨论】:
以上是关于VB.NET 中的 SQL 选择查询的主要内容,如果未能解决你的问题,请参考以下文章
从 vb.net 中的 datetime sql server 类型操作日期和时间