87abc 发表于 2008-12-10 09:57:42

数据库查询中的特殊字符的解决问题

<br>  在进行数据库的查询时,会经常遇到这样的情况:<br>  例如想在一个用户数据库中查询他的用户名和他的密码,但恰好该用户使用的名字和密码中有特殊的字符,例如单引号,“|”号,双引号或者连字符“&”。<br>  例如他的名字是1"test,密码是A|&900<br>  这时当你执行以下的查询语句时,肯定会报错:<br>  SQL = "SELECT * FROM SecurityLevel WHERE UID="" & UserID & """<br>  SQL = SQL & " AND PWD="" & Password & """ <br>  因为你的SQL将会是这样:<br>  SELECT * FROM SecurityLevel WHERE UID="1"test" AND PWD="A|&900" <br>    在SQL中,"|"为分割字段用的,显然会出错了。现在提供下面的几个函数 专门用来处理这些头疼的东西:<br>  Function ReplaceStr (TextIn, ByVal SearchStr As String, _<br>  ByVal Replacement As String, _<br>  ByVal CompMode As Integer) <br>   Dim WorkText As String, Pointer As Integer<br>   If IsNull(TextIn) Then<br>    ReplaceStr = Null<br>   Else<br>    WorkText = TextIn<br>    Pointer = InStr(1, WorkText, SearchStr, CompMode)<br>    Do While Pointer > 0<br>     WorkText = Left(WorkText, Pointer - 1) & Replacement & _<br>     Mid(WorkText, Pointer   Len(SearchStr))<br>     Pointer = InStr(Pointer   Len(Replacement), WorkText, SearchStr, CompMode)<br>    Loop<br>    ReplaceStr = WorkText<br>   End If<br>  End Function<br>  Function SQLFixup(TextIn)<br>   SQLFixup = ReplaceStr(TextIn, """, """", 0)<br>  End Function<br>  Function JetSQLFixup(TextIn)<br>   Dim Temp<br>   Temp = ReplaceStr(TextIn, """, """", 0)<br>   JetSQLFixup = ReplaceStr(Temp, "|", "" & chr(124) & "", 0)<br>  End Function<br>  Function FindFirstFixup(TextIn)<br>   Dim Temp<br>   Temp = ReplaceStr(TextIn, """, "" & chr(39) & "", 0)<br>   FindFirstFixup = ReplaceStr(Temp, "|", "" & chr(124) & "", 0)<br>  End Function <br>    有了上面几个函数后,当你在执行一个sql前,请先使用<br>  SQL = "SELECT * FROM SecurityLevel WHERE UID="" & SQLFixup(UserID) & """<br>  SQL = SQL & " AND PWD="" & SQLFixup(Password) & """<br>   <
页: [1]
查看完整版本: 数据库查询中的特殊字符的解决问题