C# SQLite问题,转义某些字符

C# SQLite问题,转义某些字符,c#,.net,winforms,sqlite,C#,.net,Winforms,Sqlite,我正在开发我的第一个数据库应用程序。这是一个使用SQLite数据库用C#编写的WinForms应用程序 我遇到了一些问题,当使用撇号时,我的SQLite查询失败。下面是我的查询结构 string SQL = "UPDATE SUBCONTRACTOR SET JobSite = NULL WHERE JobSite = '" + jobSite + "'"; 例如,如果在jobSite变量中使用了一个撇号,那么它会偏移命令中的其他撇号,并失败 因此,我的问题是: 1。在上面的查询示例中,如何转

我正在开发我的第一个数据库应用程序。这是一个使用SQLite数据库用C#编写的WinForms应用程序

我遇到了一些问题,当使用撇号时,我的SQLite查询失败。下面是我的查询结构

string SQL = "UPDATE SUBCONTRACTOR SET JobSite = NULL WHERE JobSite = '" + jobSite + "'";
例如,如果在jobSite变量中使用了一个撇号,那么它会偏移命令中的其他撇号,并失败

因此,我的问题是:

1。在上面的查询示例中,如何转义撇号和分号等字符?

2。我需要逃离哪些角色?我知道我应该避开撇号,还有什么危险吗?


谢谢你的帮助

要避开一个撇号,请添加另一个撇号

所以像
it's
这样的字符串应该作为
it's

您可能还需要转义引号。这样做的方法是使用反斜杠作为转义字符

就像这样<“代码>”他说“避开所有的引用”

您还应该注意SQL注入。。。根据您使用的编程语言的类型,存在可以帮助清除任何恶意代码的不同函数


您永远不应该连接字符串来为SQLite或任何其他SQL DB(如果可能)构建SQL查询。它使您的代码变得脆弱,并为注入攻击打开了潜在的入口点

正确的方法是使用。这种方法不需要繁琐的字符串过滤。我不知道如何在C#for SQLite中做到这一点,但是任何适合SQLite的语言绑定都应该允许您使用托管参数。

而不是使用参数

之前有一个关于它的堆栈溢出问题

如果需要更多功能,还可以使用实体框架

抱歉,不熟悉语法,但概念应该相同。 比如:

SQLiteCommand Command = "UPDATE SUBCONTRACTOR SET JobSite = NULL WHERE JobSite = @JobSite";
Command.Parameters.Add(new SQLiteParameter("@JobSite", JobSiteVariable));
command.ExecuteNonQuery();

谢谢你的贡献,你有关于我第二个问题的见解的文献吗?@CODe我已经根据你的要求对我的帖子进行了修改。谢谢!根据您的链接,我如何使用update/where命令而不是insert命令修改他们的“构建特殊SQL查询的正确方法”?谢谢!但是,如何修改UPDATE/WHERE查询以使用参数?我看到了很多使用参数的例子,但它们总是使用INSERT。我真的不想再问另一个问题,除了上面的问题之外,有人能告诉我如何使用UPDATE/WHERE命令使用参数构建上面的查询吗?我见过很多使用参数的查询示例,但它们总是使用INSERT命令。