【发布时间】:2015-03-24 19:56:32
【问题描述】:
我有 6 个文本框和一个搜索按钮... 如果一个文本框已填充或两个、三个文本框已填充,我的搜索按钮应从数据库中搜索行,即使一个文本框已填充或所有 6 个文本框均已填充,总搜索也应有效
【问题讨论】:
-
听起来不错,你有什么问题?
-
谢谢大家的回复,
我有 6 个文本框和一个搜索按钮... 如果一个文本框已填充或两个、三个文本框已填充,我的搜索按钮应从数据库中搜索行,即使一个文本框已填充或所有 6 个文本框均已填充,总搜索也应有效
【问题讨论】:
我会推测一下您的问题的意图。你想:
如果是这样,我建议使用 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
【讨论】: