我有6个文本框和一个搜索按钮... 如果填写了一个文本框,或者填写了两个,三个文本框,我的搜索按钮应该从数据库中搜索行。即使填写了一个文本框或者所有6个文本框都已填满,搜索也应该有效
答案 0 :(得分:0)
我会猜测你问题的意图。你想要:
如果是这样,我建议使用SQL-Server表值函数将分隔的字符串转换为表变量,该表变量可以像查询中的任何其他表一样使用。
这是一个示例函数:
CREATE FUNCTION [dbo].[fnVarcharListToTable](@List varchar(8000), @Delim char(1) = NULL)
RETURNS @TableVar TABLE(ID int identity(1,1), Val varchar(256) collate database_default)
AS
BEGIN
--note that each element will be trimmed of whitespace
declare
@DelimIndex int
If (@Delim IS NULL) SET @Delim = ','
select @List = ltrim(rtrim(@List))
if (left(@List,1) = @Delim)
begin
select @List = ltrim(right(@List,len(@List) - 1))
end
if (right(@List,1) = @Delim)
begin
select @List = rtrim(left(@List,len(@List) - 1))
end
while (CHARINDEX(@Delim, @List, 1) > 0)
begin
select @DelimIndex = CHARINDEX(@Delim, @List, 1)
insert into @TableVar (Val) select left(ltrim(rtrim(left(@List,@DelimIndex-1))), 256)
select @List = ltrim(right(@List,len(@List) - @DelimIndex))
end
if (@List) <> ''
--get the last item
begin
insert into @TableVar (Val) select ltrim(rtrim(@List))
end
RETURN
END
对于客户端,假设您有一个包含6个文本框的表单,并且您希望从包含文本的文本框中传入值。你可以使用下面的机制来做到这一点:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim searchterms = String.Join("|", From textbox In {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6} Where textbox.Text <> String.Empty Select textbox.Text)
If searchterms = String.Empty Then
MessageBox.Show("No Search Terms Defined")
End If
Using cn = New SqlConnection("Server=YourServer;Integrated Security=SSPI;Database=YourDatabase")
cn.Open()
Using cmd = New SqlCommand("SELECT * FROM Customer INNER JOIN dbo.fnVarcharListToTable(@searchterms,'|') SearchTerms on SearchTerms.val = Customer.Name", cn)
cmd.Parameters.AddWithValue("@searchterms", searchterms)
Using reader = cmd.ExecuteReader()
While reader.Read
MessageBox.Show("Found: " + reader("Name").ToString())
End While
End Using
End Using
End Using
End Sub