0

我遍历外部源并获取字符串列表。然后我使用以下方法将它们插入数据库:

SqlCommand command = new SqlCommand(commandString, connection);
command.ExecuteNonQuery();

其中 commandString 是插入命令。IE

insert into MyTable values (1, "Frog") 

有时字符串包含 ' 或 " 或 \ 并且插入失败。
有没有一种优雅的方法来解决这个问题(即 @"" 或类似的)?

4

2 回答 2

2

参数。

insert into MyTable values (@id, @name) 

int id = 1;
string name = "Fred";
SqlCommand command = new SqlCommand(commandString, connection);
command.Parameters.AddWithValue("id", id);
command.Parameters.AddWithValue("name", name);
command.ExecuteNonQuery();

现在name可以有任意数量的引号,它会正常工作。更重要的是,它现在可以免受 sql 注入的影响。

像“dapper”这样的工具(在 NuGet 上免费提供)使这更容易:

int id = 1;
string name = "Fred";
connection.Execute("insert into MyTable values (@id, @name)",
    new { id, name });
于 2013-06-09T08:27:46.957 回答
1

您应该考虑使用参数化查询。这将允许您插入数据,无论内容如何,​​还可以帮助您避免将来可能的 SQL 注入。

http://csharp-station.com/Tutorial/AdoDotNet/Lesson06

http://www.c-sharpcorner.com/uploadfile/puranindia/parameterized-query-and-sql-injection-attacks/

于 2013-06-09T08:27:46.390 回答