Sql 在vb.net ADO中使用带参数的通配符

Sql 在vb.net ADO中使用带参数的通配符,sql,vb.net,parameters,ado,Sql,Vb.net,Parameters,Ado,我有以下代码,作为我的程序的一部分,它工作得非常好: .CommandText = .CommandText & " and [Name] = ?" 然后,我使用以下方法添加参数: .Parameters.Append(SearchCom.CreateParameter("@Name", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamInput, 100, Name.Text)) 这非常有效,但我真的希望

我有以下代码,作为我的程序的一部分,它工作得非常好:

.CommandText = .CommandText & " and [Name] = ?"
然后,我使用以下方法添加参数:

.Parameters.Append(SearchCom.CreateParameter("@Name", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamInput, 100, Name.Text))
这非常有效,但我真的希望在Name.Text中搜索包含该值的所有内容。我搜索了几十篇文章,上面说您可以执行以下操作,但它始终返回0个结果,即使存在明确的数据匹配:

.CommandText = .CommandText & " and [Name] like '%' + ? + '%'"
.Parameters.Append(SearchCom.CreateParameter("@Name", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamInput, 100, Name.Text))
我现在尝试了下面的建议,但记录集仍然返回0个结果:

.CommandText = .CommandText & " and [Name] like ?"
.Parameters.Append(SearchCom.CreateParameter("@Name", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamInput, 100, "%" + Name.Text + "%"))
我正在使用Microsoft Visual Studio 2015,在vb.net中编写,使用ADODB连接到SQL Server 2014实例

CodingGorilla建议的SQL跟踪显示以下SQL在运行时运行。我不知道为什么它不起作用

exec sp_executesql N'SELECT * FROM qFormsAndName Where [FormType] Like ''R1%'' and [Name] like @P1 ORDER BY [CurrentStatus], [DateReceived];',N'@P1 char(100)','%JONES%

有人能帮忙吗?

我想尝试一下这方面的细微变化:

.CommandText = .CommandText & " and [Name] like ?"
.Parameters.Append(SearchCom.CreateParameter("@Name", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamInput, 100, "%" + Name.Text + "%"))

这应该是可行的,尽管这并不能直接回答为什么您的代码版本不起作用。

回答为对原始问题的注释,但对于任何看到这一点的人来说,文本长度应该是参数文本的长度,因此: .Parameters.Append(SearchCom.CreateParameter(“@Name”,ADODB.DataTypeEnum.adChar,ADODB.ParameterDirectionEnum.adParamInput,100,tbName.Text))

致: .Parameters.Append(SearchCom.CreateParameter(“@Name”,ADODB.DataTypeEnum.adChar,ADODB.ParameterDirectionEnum.adParamInput,tbName.TextLength,tbName.Text))

或:


.Parameters.Append(SearchCom.CreateParameter(“@Name”,ADODB.DataTypeEnum.adChar,ADODB.ParameterDirectionEnum.adParamInput,len(tbName.Text),tbName.Text))

与其根据输入自定义参数定义,不如切换到更合适的
varchar
数据类型,指定可变长度字符串的,而不是指定固定长度字符串的
char

.CommandText = .CommandText & " and [Name] like ?"
.Parameters.Append(SearchCom.CreateParameter("@Name", ADODB.DataTypeEnum.adVarChar, _
    ADODB.ParameterDirectionEnum.adParamInput, 100, "%" + Name.Text + "%"))

(另外,如果您真的使用VB.Net、VS 2015和SQL Server 2014,正如您在问题中所说的那样,我郑重建议您改用旧的ADO,而不是2000年左右的旧ADO)

这也行不通。我把名字“JONES”放在文本框中,我的数据库中有“EWAN JONES”和“CHARLOTTE JONES”等记录,但记录集仍然显示0个结果。如果我将like改为=并删除%,我必须将“EWAN JONES”放在文本框中,但它确实返回了正确的记录。CodingGorilla,我的select查询是从视图而不是从表中进行选择是否重要?它只是一个视图,用于预定义连接。完整的SQL语句如下:“从qFormsAndName中选择*,其中[FormType]如'R1%'和[Name]如按[CurrentStatus]、[DateReceived]排序;”它应该对视图或表起作用。你能看到它通过SQL Profiler运行的最终查询吗?CodingGorilla,对不起,朋友,我该怎么做?它是Visual Studio工具还是MSSQL工具?我想我已经解决了。开始跟踪,现在我将作为所有三种变体运行代码。好的,我已经为任何偶然发现这个问题的人解决了这个问题。您将在my.parameters.append中看到,我将“默认”文本长度设置为100。这适用于“=Param”查询(出于某种原因),但不适用于类似的查询,因为该参数在文本后采用空格字符。与%P1%类似,其中P1是一个参数,它的跟踪方式类似于“%JONES%”