记录集的奇怪错误

时间:2017-08-23 08:22:07

标签: sql vbscript asp-classic recordset

我试图通过SQL在Access数据库中搜索字符串。

方法1效果很好,但方法2让我很头疼。

即将发生的错误是

  

ADODB.Recordset Fehler" 800a0bcd' BOF或EOF为True,或者当前记录已被删除。请求的操作需要当前记录。

我实际上试图通过If KassenzeichenDB.EOF Then来避免此错误。但错误发生在VornameString = Vorname.getString行中。

我只是不知道错误意味着什么。表格列中的数据类型与KassenzeichenVorname相同;两者几乎相同。

'method 1
Set KassenzeichenDB = Conn.Execute("SELECT Kassenzeichen FROM Kassenzeichen WHERE (Kassenzeichen='" & Eingabe & "') ")

'method 2
Set KassenzeichenDB = Conn.Execute("SELECT Kassenzeichen FROM Kassenzeichen WHERE (Vorname='" & Eingabe & "') ")

If KassenzeichenDB.EOF Then 
    response.write "Empty"
Else                                    
    Do While Not KassenzeichenDB.EOF        
        KassenzeichenString = KassenzeichenDB.Fields(0) 
        Set Vorname = Conn.Execute("SELECT Vorname FROM Kassenzeichen WHERE Kassenzeichen LIKE '" & KassenzeichenString & "'")
        VornameString = Vorname.getString
        Set Nachname = Conn.Execute("SELECT Nachname FROM Kassenzeichen WHERE Kassenzeichen LIKE '" & KassenzeichenString & "'")  
        NachnameString = Nachname.getString
        response.write KassenzeichenString & " | " & NachnameString & ", " & VornameString & "</b></br>"
        KassenzeichenDB.MoveNext
    Loop
End If

1 个答案:

答案 0 :(得分:1)

您已查看data.frames看起来不错,但错误是KassenzeichenDB.EOF的结果。这可能意味着VornameString = Vorname.getString是真的,所以你可能想检查一下。

针对您的代码的其他一些建议:尝试选择您需要的所有列。例如......

Vorname .EOF

我还必须让您知道您的代码容易受到SQL injection攻击,所以如果您的变量KassenzeichenString = KassenzeichenDB.Fields(0) Set rs = Conn.Execute("SELECT Vorname, Nachname FROM Kassenzeichen WHERE Kassenzeichen LIKE '"&KassenzeichenString&"'") If rs.EOF Then response.write "Vorname/Nachname Empty" Else VornameString = rs("Vorname") NachnameString = rs("Nachname") response.write KassenzeichenString & " | " & NachnameString & ", " & VornameString & "</b></br>" End If KassenzeichenDB.MoveNext Eingabe来自用户输入或其他不受信任,您应该阅读源。我建议您学习如何构建parameterized queries using ADO以避免此问题。