Dim Con2 As String
        If comp.SelectedItem.Value = "Like" Then
            Con2 =" and " + Condition.SelectedItem.Value + comp.SelectedItem.Value + "''%" + Result.Text + "%''"
        Else
            Con2 = " and " + Condition.SelectedItem.Value + comp.SelectedItem.Value + "''" + Result.Text + "''"
        End If       '以下是存储过程调用法
        Dim ds As DataSet = New DataSet
        Dim da As SqlDataAdapter = New SqlDataAdapter        da.SelectCommand = New SqlCommand("Stp_Web_SaleOrder", conn)
        da.SelectCommand.CommandType = CommandType.StoredProcedure
        da.SelectCommand.Parameters.Clear()
        da.SelectCommand.Parameters.Add(New SqlParameter("@TypeID", SqlDbType.Char, 2))
        da.SelectCommand.Parameters.Add(New SqlParameter("@Condition", SqlDbType.Char, 400))
        da.SelectCommand.Parameters("@TypeID").Value = Session("useraut")
        da.SelectCommand.Parameters("@Condition").Value = Con2
        conn.Open()
        Menu.DataSource = da.SelectCommand.ExecuteReader()
        Menu.DataBind()传递的参数con2,主要类似这样的参数"and a.orderid like ''%1234%''",使用这样的参数后报错,
如果将上面的参数,直接写到con2的位置,错误停在    Menu.DataBind() 该句代码,报“遇到被零除错误”,如果con2="",则没有问题,能够得到数据,如果con2是由最上面的表达式生成的,则出错在   Menu.DataSource = da.SelectCommand.ExecuteReader(),这一句代码,报错是,在第20行出错,但是这句代码,是在85行,第20行是注释行。请各位大虾多帮忙了,本人初学asp.net''%1234%'' ,这是两个单引号,不是双引号,直接在sql分析器中执行,带这样的参数,在存付过程中执行是可以了。使用两个单引号的原因是,SQL的单引号是保留符号,在存储过程中,是通过将sql查询代码和传递的条件参数拼在一起实现查询的。

解决方案 »

  1.   

    用了存储过程后,Con2中的值不要用两个单引号,一个就够了
    Dim Con2 As String
            If comp.SelectedItem.Value = "Like" Then
                Con2 =" and " + Condition.SelectedItem.Value + comp.SelectedItem.Value + "'%" + Result.Text + "%'"
            Else
                Con2 = " and " + Condition.SelectedItem.Value + comp.SelectedItem.Value + "'" + Result.Text + "'"
            End If
      

  2.   

    Con2 =" and " + Condition.SelectedItem.Value + comp.SelectedItem.Value + "\'" + "%" + Result.Text + "%" + "\'";