【发布时间】:2018-01-03 12:40:26
【问题描述】:
我对 C# 很陌生,我只是将编码作为我的爱好之一学习。
我正在尝试使用 Visual Studio 和 Access 数据库开发一个独立的 Windows 应用程序。 我在如何访问数据库时遇到了一些困难。 项目是我在 Access 数据库中的表,项目名称和路径是我在项目表中的列。
我正在尝试读取某个路径中的文件夹名称,并将文件夹的名称和路径写入我的表中。
如何仅比较和插入新创建的文件夹?
这表明我的插入语法有错误!
string[] files = Directory.GetDirectories(@"C:\\SomePath\\Project_1\\Project_1\\Resources");
foreach (string file in files)
{
string name = new DirectoryInfo(file).Name;
String Root = Path.GetFullPath(file);
connection_2.Open();
OleDbCommand ListWrite = new OleDbCommand();
ListWrite.Connection = connection_2;
ListWrite.CommandText= "insert into Project (projectname,path) values ('" + name + "','" +Root+ "') where'"
+ name + "' != projectname ";
ListWrite.ExecuteNonQuery();
connection_2.Close();
}
【问题讨论】:
-
您尝试执行的实际结果查询是什么?您应该真正考虑使用查询参数而不是这样的字符串连接。目前,您的代码对 SQL 注入开放,这不仅不安全,而且更容易出错。此外,通常
WHERE子句中的比较将与您所拥有的相反。column != value,而不是相反。还有,真的是!=吗?或者运营商应该是<>? -
你可以在这里阅读关于 sql 注入的内容:acunetix.com/websitesecurity/sql-injection
-
请注意,您应该转义反斜杠或使用 @ 文字,但不能同时使用两者,即
@"C:\SomePath\MyFile"或"C:\\SomePath\\MyFile。此外,INSERT INTO TABLE() VALUES() WHERE predicate在我知道的任何 RDBMS 中都不是有效的 SQL。 -
等等,
INSERT怎么可能拥有WHERE?这真的没有意义。您需要在数据中放置一个唯一约束并处理错误,或者在插入之前读取数据以查看其中的内容。