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

时间:2016-02-08 14:03:12

标签: sql vb.net parameters ado

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

.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,使用ADODB在vb.net中编写连接到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%

请有人帮忙吗?

3 个答案:

答案 0 :(得分:0)

我会尝试稍微改变一下:

    <div class="row">
    <div class="row__colspaced">
        <?php
        $row = 1;
        if (($handle = fopen("http://api.ekomi.de/get_feedback.php?interface_id=66630&interface_pw=f2d097e83db1880e85e2f77aa&range=3m&type=csv", "r")) !== FALSE) {
            while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        echo "<div class='colspan12-4 colspan6-3 as-grid with-gutters'><div class='content-module--review-list__item item' data-mh='review-item'>";
                $num = count($data);
                $row++;

            for ($c=0; $c < $num; $c++) {
                if($c == 0){
                    echo gmdate('Y-m-d H:i:s',$data[$c]);
                }
                else if($c == 2){
                    if($data[$c] == 1){
                            echo '<div class="fa-star-rating">
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star-o"></i>
                                    <i class="fa fa-star-o"></i>
                                    <i class="fa fa-star-o"></i>
                                    <i class="fa fa-star-o"></i>
                                </div>';
                    }
                    if($data[$c] == 2){
                            echo '<div class="fa-star-rating">
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star-o"></i>
                                    <i class="fa fa-star-o"></i>
                                    <i class="fa fa-star-o"></i>
                                </div>';
                        }
                    if($data[$c] == 3){
                            echo '<div class="fa-star-rating">
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star-o"></i>
                                    <i class="fa fa-star-o"></i>
                                </div>';
                        }
                    if($data[$c] == 4){
                            echo '<div class="fa-star-rating">
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star-o"></i>
                                </div>';
                        }
                    if($data[$c] == 5){
                            echo '<div class="fa-star-rating">
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star"></i>
                                    <i class="fa fa-star"></i>
                                </div>';
                        }

                }
                else {
                    echo '<div class="inner-item item'.$c.'">' . $data[$c] . "</div>";
                }
            }

            echo "</div></div>";
                }
                fclose($handle);
            }
            ?>
    </div>
</div>

这应该有用,虽然它不能直接回答为什么你的代码版本不起作用。

答案 1 :(得分:0)

作为对原始问题的评论回答,但对于任何看到此问题的人,文本长度应该是参数文本的长度,因此:     .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))

答案 2 :(得分:0)

不是根据输入自定义参数定义,而是最好切换到更合适的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.Net而不是旧的ADO,可追溯到约2000年)