尝试将文件路径保存到数据库时出错

Posted

技术标签:

【中文标题】尝试将文件路径保存到数据库时出错【英文标题】:Error when trying to save file path to database 【发布时间】:2017-04-15 07:38:28 【问题描述】:

当我尝试将文件路径保存到 Microsoft access DB 时遇到问题,当我从以下代码中删除图像位置时,一切运行正常,只要我尝试保存文件路径,我就会得到一个语法错误...

下面是查询...

string query = "INSERT INTO Company(companyName, phone, website, address, companyType, description, image) VALUES('" + 
            company.getName() + "','" + company.getPhone() + "','" +  company.getWebsite() + "','" +  
            company.getAddress() + "','" + company.getType() + "','" + company.getDescription() + "','" +
            company.getImage() + "')";

我知道我的代码对 sql 注入是开放的,但我会在以后修复它,我还尝试了参数化查询,看看这是否有助于解决问题,但它没有..

我也试过用“/”替换“\”

任何帮助将不胜感激,因为这真的让我很烦......

【问题讨论】:

你能给我们看看 company.getImage() 返回的样本吗? 图片列的数据类型是什么?确切的错误是什么? 数据类型既有短文本也有长文本,通常会返回类似“Q:\Database\Profiles\ProfilePhotos\depp.jpg”的内容 【参考方案1】:

Image 是 MS-Access 数据库引擎中的保留字。您不能在像您这样的查询中按原样使用它。您需要将其封装在方括号之间(或更好地更改该字段名称以避免将来出现类似问题)

....., [Image]) VALUES (.....

如果您知道由字符串连接引起的问题,那么我真的建议您尽快切换到参数化查询。 (例如,如果您的 company.getDescription 返回一个包含单引号的值,您认为会发生什么?)

我觉得要给出的另一个重要建议是放弃类 java 的态度,使用 get/set 前缀方法返回类的属性。 C# 最显着的特性之一是属性。使用它们。

public class Company

    public string Description get;set;
    public string Phone get;set;
    .... and so on...

【讨论】:

....当您想出最简单的解决方案时,必须喜欢它,非常感谢,我会标记为答案。 哦,写出脚本时,我不得不在 SQL 中“转义”列名的次数。特别是 KeyValue 的... 好答案,史蒂夫 :) 如果我能 +1 两次就好了!真的很高兴看到 SO 成员付出更多努力来研究比原始问题更深入的问题 - 我的意思是关于使用属性的额外说明。

以上是关于尝试将文件路径保存到数据库时出错的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试将图像路径数据库和图像本身保存到项目中的文件夹[关闭]

Qt - 将 QString 路径保存到注册表中的 QSettings

路径名太长,尝试在 Python 中使用 OpenCV 或 PIL.Image 保存图像时出错

PHP和Ajax将文件路径上传到Mysql并将重命名的图像保存到文件夹失败

ExpressJS:TypeError:无法读取未定义的属性“路径”尝试将文件上传到 cloudinary 并将 url 保存到 mongoDB

使用 path_provider 到 video_player 获取下载的文件路径时出错