【问题标题】: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”的内容

标签: c# sql wpf ms-access


【解决方案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 成员付出更多努力来研究比原始问题更深入的问题 - 我的意思是关于使用属性的额外说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2012-01-18
相关资源
最近更新 更多