vb.net中sql通配符表达式的正确语法

vb.net中sql通配符表达式的正确语法,sql,vb.net,Sql,Vb.net,我想知道vb.net中sql通配符表达式的正确语法是什么 我想要的是在我的dayVariable与Day记录匹配时选择我的记录,如果我的dayVariable=“T”,那么我的sql表达式需要显示一天中所有字母为“T”甚至“TF”或“FT”的记录,只要有一个“T” 我所做的只是显示记录哪一天的记录与“T”完全匹配 注意:我尝试在sql express中构建查询,如下所示: SELECT * FROM tblSomething WHERE Day LIKE '%T%' 我实现了在Day列中显示

我想知道vb.net中sql通配符表达式的正确语法是什么

我想要的是在我的dayVariable与Day记录匹配时选择我的记录,如果我的dayVariable=“T”,那么我的sql表达式需要显示一天中所有字母为“T”甚至“TF”或“FT”的记录,只要有一个“T”

我所做的只是显示记录哪一天的记录与“T”完全匹配

注意:我尝试在sql express中构建查询,如下所示:

 SELECT * FROM tblSomething WHERE Day LIKE '%T%'
我实现了在Day列中显示所有带有“T”字母的记录

这是我真正的Vb.net

    Private Function checkSecConflict(ByVal sTime As String, ByVal eTime As String, ByVal secID As String, ByVal day As String) As Boolean
    If Connect.State = ConnectionState.Closed Then
        Connect.Open()
    End If
    Dim cmd2 As New SqlCommand("Select * from tblSubjectOffer Where  eTime > " & sTime & " AND sTime < " & eTime & " AND Day LIKE '%' + day + '%' AND SectionID = '" & secID & "'", Connect)
    Dim dr As SqlDataReader = cmd2.ExecuteReader()
    dr.Read()
    If dr.HasRows Then

        Return True
    Else

        Return False

    End If
    dr.Close()
    cmd2.Dispose()
End Function
Private Function checkSecConflict(ByVal sTime作为字符串,ByVal eTime作为字符串,ByVal secID作为字符串,ByVal day作为字符串)作为布尔值
如果Connect.State=ConnectionState.Closed,则
Connect.Open()
如果结束
Dim cmd2作为新的SqlCommand(“从tblSubjectOffer中选择*,其中eTime>”&sTime&“和sTime<”&eTime&“和类似于“%”+Day+“%”的日期,以及SectionID=”&secID&“”,Connect)
Dim dr作为SqlDataReader=cmd2.ExecuteReader()
里德博士()
如果哈斯罗博士
返回真值
其他的
返回错误
如果结束
克洛斯博士()
cmd2.Dispose()
端函数
忽略我关于时间和secID的where语句,因为我发现我关于day的通配符才是真正的问题,我想是的,:)

提前感谢那些想帮我解决问题的人

" AND Day LIKE '%' + day + '%' AND SectionID = '"
这应该是:
“和日期类似“%”“+Day+“%”和SectionID=”


您没有正确地将
day
参数附加到字符串中

您的代码有一些问题需要解决。
首先,不要使用全局Sql连接。有一种机制允许快速创建和打开连接

其次,使用参数化查询将值传递给数据库引擎,为数据库列指定正确的数据类型。允许自动解释字符串值将导致错误,并使代码易于使用

最后,每个一次性对象(如连接、命令和读卡器)都应封装在一个可提供正确功能以关闭和处置这些对象(也可用于例外情况)的容器中

Private Function checkSecConflict(ByVal sTime作为字符串,ByVal eTime作为字符串,ByVal secID作为字符串,ByVal day作为字符串)作为布尔值
Dim sqlText=“从tblSubjectOffer中选择*
“Where eTime>@starttime和sTime<@endtime和”&_
“像@Day和SectionID=@secid这样的日期”
使用con=newsqlconnection(..此处为连接字符串…)
使用cmd2作为新的SqlCommand(sqlText,con)
con.Open()
cmd.Parameters.Add(“@starttime”,SqlDbType.DateTime).Value=Convert.ToDateTime(eTime)
cmd.Parameters.Add(“@endttime”,SqlDbType.DateTime).Value=Convert.ToDateTime(sTime)
cmd.Parameters.Add(“@day”,SqlDbType.NVarChar).Value=“%”和day&“%”
cmd.Parameters.Add(“@secid”,SqlDbType.Int).Value=Convert.ToInt32(secid)
使用dr=cmd2.ExecuteReader()
'此处可以使用HasRows的值True/False作为返回值
返回哈斯罗博士
终端使用
终端使用
终端使用
端函数

注意:此代码假定您的字段
eTime
sTime
smalldatetime
(或类似),字段
Day
nvarchar
,而
SectionID
整数
我总是使用
。。。像“*”+Day+“*”…
这样的一天似乎工作正常。

除了vb中缺少开始和结束引号之外,我看不出有问题。你有什么错误吗?同时,在sql中进行连接将允许您对查询进行参数化。您的基础数据库是什么?@T I,我没有收到任何错误,但我的代码不符合我的要求。我对通配符的理解是否正确?只要它符合where语句或特定字母或字符串,它就会显示所有记录。我使用sql express作为我的数据库,@gordonlinoff您可以显示您在发出此查询时使用的真实vb.net代码吗?aaaa当我完成回答时,我看到了您的编辑=\很抱歉,我在将vb.net语法粘贴到问题中时忘记更改它,但是如果您看到我问题的第一部分,我已经尝试了您希望我做的事情。感谢您更正我的代码,我已经更改了与您建议类似的代码,但这并不能解决我真正的问题,我想知道如何让我的语法选择所有可能与我输入到“day”变量类似的记录,sample如果我输入“t”值,那么上面有“t”的所有记录都会显示出来,上面的代码选择了“day”列中的所有记录您有一个字符串,该字符串在列的任何位置都包含字母“T”,并且带有任何大小写。当然还有其他条件,所有条件都与之相关,因此每个条件都应该得到尊重。如果删除其他条件,您是否获得了正确的记录集?如果是,则问题在其他条件下
" AND Day LIKE '%' + day + '%' AND SectionID = '"
Private Function checkSecConflict(ByVal sTime As String, ByVal eTime As String, ByVal secID As String, ByVal day As String) As Boolean

    Dim sqlText = "Select * from tblSubjectOffer " & _ 
                  "Where  eTime > @starttime AND sTime < @endtime AND " & _
                  "Day LIKE @day AND SectionID = @secid"
    Using con = new SqlConnection(....connection string here ....)
    Using cmd2 As New SqlCommand(sqlText, con)
        con.Open()
        cmd.Parameters.Add("@starttime", SqlDbType.DateTime).Value = Convert.ToDateTime(eTime)
        cmd.Parameters.Add("@endttime", SqlDbType.DateTime).Value = Convert.ToDateTime(sTime)
        cmd.Parameters.Add("@day", SqlDbType.NVarChar).Value = "%" & day & "%"
        cmd.Parameters.Add("@secid", SqlDbType.Int).Value = Convert.ToInt32(secID)
        Using dr = cmd2.ExecuteReader()
           ' the value True/False of HasRows could be used as return here
           return dr.HasRows   
        End Using
    End Using
    End Using
End Function