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 复选框选项构建 SQL 查询时遇到问题

从 vb.net 中的 datetime sql server 类型操作日期和时间

按参数过滤 sql vb.net

vb.net 指定选择查询OLEDB数据库

下拉列表将参数传递给 vb.net 中的 webmethod

在 VB.NET 中使用 OleDb.NET 调用 Access 2010 存储选择查询的异常