在SQL查询中要使用哪些字符?

我正在处理一个SQL查询,将数据库中的信息导入到Excel中。 但是,来源是来自网站,所以我无法控制他们使用的字符。 我无法编辑表格中的字段。

我遇到了一个问题,该网站在字段中使用'字符有时会导致我的代码中的问题:

示例字段:“Something's Here”

WHERE(Table.fieldName ='Something's Here')

'导致错误,但我知道我可以通过VBA在这种情况下更改'到'。

还有其他可能导致问题的angular色吗? 也许(或)或 – 或者,

编辑:请注意,我不知道PHP,并不真正了解什么是准备好的声明,或者如果这将在我的情况下工作。 重申,我使用Excel通过ODBC连接导入数据。 这些存储在Excel中的表格中。 用户input一个数字,然后通过VBA更新ODBC连接。 有一个相关的字段(用户没有input)基于用户input的数字,有时有不允许的字符。 我不知道一个准备好的声明将能够解决这个问题。

你已经遇到了不得不“磨砂”你的数据的古老问题。 这种情况通常发生在当您有操作员或外部地点将事情从networking上拖走时。 问题是,你无法控制别人把什么放入你的系统。

正如你所提到的,一个“单引号”可能会导致一个问题。 或者一个逗号可能会导致问题。 此外,其他不可见的ASCII字符可能会导致问题。 (特别是如果你正在发送文本到打印机。)像换行符回车可能会导致各种问题,你甚至不知道他们在那里。

因此,要回答你的“其他人物要小心……”的问题,我会把它改为“我要允许什么字符”。

这是所有ASCII字符的地图的链接,您可以使用VBA扫描您读入的每个string。

这是非常耗时的,但是如果您需要清理string数据,则需要执行一些操作。

其基本思想是parsing你正在阅读的string(或将要阅读的string),并逐个字符地检查逻辑,以查看ascii码是否在可接受的范围内。

即:

Dim strChar As String Dim intAsc As Integer Dim booFlag As Boolean intAsc = Asc(strChar) If ((intAsc >= 65) And (intAsc <= 90)) _ Or ((intAsc >= 97) And (intAsc <= 122)) _ Or ((intAsc >= 48) And (intAsc <= 57)) _ Or ((intAsc = 32) _ Then booFlag = True End If 

范围65 – 90是您的大写字母。 97 – 122是小写字母。 48 – 57是从零到九。 而32是一个真正的空间人物ascii。 你可以添加其他的“或”语句,只允许你的数据库中的代码。 但是,你不想忽略“单引号”和其他隐形东西的ascii。

你可以把这个代码放到一个VBA函数中,然后parsing你想要检查的每个string。 如果您发现某些不在批准的列表中,您可以将其更改为空格字符(或其他)。

另外,如果您担心SQL注入,而不是扫描关键字,则应考虑使用参数化查询来发送SQL命令。

希望能给你一个合作的框架。 🙂