Public Sub putdata(ByVal searchword As String) '*********进行查询结果数据输出******'
        Dim objBusiSen As Business.SentenceMan.SentenceMangage = New Business.SentenceMan.SentenceMangage
        objBusiSen.pS_OriginalText = searchword 'txtWord.Value
        Dim Dv As DataView
        Dv = New DataView(objBusiSen.FSearchAppointed(pagecount).Tables("allthis"))
        Dim i As Integer = 0        For i = 0 To Dv.Count - 1
            Tr = New HtmlTableRow
            Td = New HtmlTableCell
            Td.InnerText = "[" + Dv(i)("D_Name") + "]"
            Tr.Cells.Add(Td)
            Tb.Rows.Add(Tr)
            Tr = New HtmlTableRow
            Td = New HtmlTableCell
            Td.InnerText = Convert.ToString(Dv(i)("S_OriginalText"))
            Tr.Cells.Add(Td)
            Tb.Rows.Add(Tr)
            Td = New HtmlTableCell
            Td.InnerText = Convert.ToString(Dv(i)("S_Translation")) + "专业:[" + Convert.ToString(Dv(i)("S_Name")) + "]" + "出处:[" + Convert.ToString(Dv(i)("D_Derivation")) + "]"
            Tr = New HtmlTableRow
            Tr.Cells.Add(Td)
            Tb.Rows.Add(Tr)
            arrstring = arrstring + Convert.ToString(Dv(i)("S_ID")) + ";"
        Next
        Dim count As Integer = Dv.Count        If count < pagecount Then
            Dim objSunstr As SunvCode.String.SunVString = New SunvCode.String.SunVString
            Dim arrstr As String()
            arrstr = searchword.Split(" ") '拆分查询句子
            'Dim objBusiSen As Business.SentenceMan.SentenceMangage = New Business.SentenceMan.SentenceMangage            Dim k As String = ""
            Dv.EndInit()
            For Each k In arrstr                If (Not k = " ") And (Not k = "") And Not (k = Nothing) Then
                    Dim objBusiSen2 = New Business.SentenceMan.SentenceMangage
                    objBusiSen2.pS_OriginalText = k
                    Dv = New DataView(objBusiSen2.FSearchAppointed(pagecount - count).Tables("allthis"))
                    For i = 0 To Dv.Count - 1
                        Dim arrar As String() = arrstring.Split(";")
                        If Not Examined(arrar, Convert.ToInt32(Dv(i)("S_ID"))) Then
                            Tr = New HtmlTableRow
                            Td = New HtmlTableCell
                            Td.InnerText = "[" + Dv(i)("D_Name") + "]"
                            Tr.Cells.Add(Td)
                            Tb.Rows.Add(Tr)
                            Tr = New HtmlTableRow
                            Td = New HtmlTableCell
                            Td.InnerText = Convert.ToString(Dv(i)("S_OriginalText"))
                            Tr.Cells.Add(Td)
                            Tb.Rows.Add(Tr)
                            Td = New HtmlTableCell
                            Td.InnerText = Convert.ToString(Dv(i)("S_Translation")) + "专业:[" + Convert.ToString(Dv(i)("S_Name")) + "]" + "出处:[" + Convert.ToString(Dv(i)("D_Derivation")) + "]"
                            Tr = New HtmlTableRow
                            Tr.Cells.Add(Td)
                            Tb.Rows.Add(Tr)
                        Else
                            arrstring = arrstring + Convert.ToString(Dv(i)("S_ID")) + ";"
                        End If                    Next
                    count = count + Dv.Count
                    Dv.EndInit()
                    If count >= pagecount Then '假如记录已足则跳出循环
                        Exit For
                    End If
                End If
                'Response.Write(k + "<br>")
            Next
        End If
    End Sub

解决方案 »

  1.   

    我跟踪时
    第一个
      Dv = New DataView(objBusiSen.FSearchAppointed(pagecount).Tables("allthis"))
    时没出错运行到这
    Dv = New DataView(objBusiSen2.FSearchAppointed(pagecount - count).Tables
    ("allthis"))
    进入商务层,调用
     Public Function FSearchAppointed(ByVal count As Integer) As DataSet
                Dim objData As Data.SentenceMan.SentenceManage = New Data.SentenceMan.SentenceManage
                Return objData.FSearchAppointed(S_OriginalText, count)
            End Function
    进入数据层,调用 Public Function FSearchAppointed(ByVal searchword As String, ByVal count As Integer, Optional ByVal DictionaryID As Integer = 0) As DataSet 'searchword用户搜索的关键字,count指定要搜索的最大条数
                Dim para As SqlParameter()= {New SqlParameter("@SearchWord", System.Data.SqlDbType.NChar, 500), _
                                              New SqlParameter("@S_DictionaryID", System.Data.SqlDbType.Int), _
                                              New SqlParameter("@count", System.Data.SqlDbType.Int)}
                para(0).Value = searchword
                para(1).Value = DictionaryID
                para(2).Value = count
                Dim objDb As Db.SunDb = New Db.SunDb("connstr")
                Return objDb.FExecuteProc("SentenceMan_PSearch", para, "allthis")
            End Function
    运行到最后一句
    return objDb.Fex....
    时出错
    我真的搞晕了
    再说
    我写的Db.SunDb数据库处理公用类是经过考验的
    不至于出错
    那我真搞不懂了
      

  2.   

    我觉得你第二次调用你的FSearchAppointed方法时没有清空你的SqlParameter(),才导致错误!你觉得呢?//
    我很少上QQ,  [email protected]
      

  3.   

    我那个数据库组件里
    是这样写的
      Public Function FexecuteProc(ByVal Proname As String, ByVal para As SqlParameter(), ByVal tbname As String) As DataSet '执行带参数返回DataSet对象的存储过程
                Dim conn As SqlConnection = New SqlConnection(connstr)
                Dim SqlCom As SqlDataAdapter = New SqlDataAdapter(Proname, conn)            SqlCom.SelectCommand.CommandType = CommandType.StoredProcedure
                SqlCom.SelectCommand.Parameters.Clear()
                Dim Ipara As SqlParameter
                For Each Ipara In para
                    SqlCom.SelectCommand.Parameters.Add(Ipara)
                Next            Dim Ds As DataSet = New DataSet
                SqlCom.Fill(Ds, tbname)
                Return Ds
            End Function
    编译成dll后我也没去想它
    不过我想应该没什么问题才是
    不然我就要累死了