我正在使用Vb.net 2012和sql作为反手。 这是我的sql server数据库表,它的名字是“Timetable”
__________________________ Name | Course | _____|___________________| a | DTP Flash AutoCad |(All these are courses with space between each courses) b | PHP Asp C# | c | Flash WebDesigning| _____|___________________|
我正在运行此SQL查询
Private Sub TxtName_TextChanged(sender As Object, e As EventArgs) Handles TxtName.TextChanged
Try
Dim txt As Integer = Val(Len(TxtName.Text))
MsgBox(Val(txt))
Dim str As String = "select FName, SurName,Courses,TotalFees,Balance,TotalDuration,DOA,DOC,Status,Time,ContactNo,ONo from TimeTable where FName='" & TxtName.Text & "' or Courses= SUBSTRING('" & TxtName.Text & "',0,50)"
Dim ds As New DataSet
adp = New SqlDataAdapter(str, cn)
adp.Fill(ds)
DataGridView1.DataSource = Nothing
DataGridView1.Refresh()
DataGridView1.DataSource = ds
DataGridView1.DataSource = ds.Tables(0)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
当搜索名称为
时,数据以gridview显示
但是当我用子串编写课程名称时,它不显示我...我必须写整个课程名称....即“DTP Flash AutoCad”。
我希望如果用户输入DTP,它会显示数据,即使该行包含
DTP Flash AutoCad。
答案 0 :(得分:2)
查找SQL关键字LIKE。 (这绝不赞同你的设计。)
答案 1 :(得分:1)
我假设您正在使用SQL Server?不同的数据库引擎(Oracle,DB2等)有不同的方法来实现这一点。
您需要使用LIKE。或者,为了更有效的查找(假设您的SQL版本上有完整的文本索引),您可以使用CONTAINS。
作为旁注,我还会调查stored procedures或parameterised queries。以您的方式运行动态SQL是一个安全问题。
为了完整性,这里是代码中的“Dim str”行,其中有一个LIKE子句用于T-SQL:
Dim str As String = "select FName, SurName,Courses,TotalFees,Balance,TotalDuration,DOA,DOC,Status,Time,ContactNo,ONo from TimeTable where FName LIKE'%" & TxtName.Text & "%' or Courses LIKE '%" & TxtName.Text & "%'"
另一方面,我几乎可以保证Google不会使用LIKE子句。事实上,我敢打赌他们甚至不使用SQL数据库 - 它更可能是某种文档存储,但我之前没有真正研究过那么多细节(我不认为这些信息)可供公众使用)。在搜索大量数据时,LIKE效率不高,而SQL也不是存储大量数据集的最佳方式。