如何构建SQLite查询来处理包含撇号的字符串

时间:2014-01-23 09:06:22

标签: c# sqlite winrt-xaml

如果字符串company包含撇号,则会导致错误。

示例:公司名称,如“William's store”

如何构建一个SQLite查询,使用SQLite-Net api来处理这类问题。


I am using SQLite-Net api and I tried both and they did not work.

In SQLite-Net api, I think there is no Parameters. What other alternative that I can use?


private async void GetCustomerVATGroup(string Company)
{


1) 

string strChkName = Company.Replace("'", "''"); // or Company.Replace("'","\'");

var allUsers = await db.QueryAsync<Customer>(

"Select * From Customer Where CompanyName ='" + strChkName + "'");


2) 

var allUsers = await db.QueryAsync<Customer>(

"Select * From Customer Where CompanyName =''" + Company + "''");


}


1 个答案:

答案 0 :(得分:5)

来自SqlLite Documentation

  

通过将字符串括在单引号中形成字符串常量   (')。字符串中的单引号可以通过放置两个来编码   连续单引号 - 如Pascal。 C风格逃脱使用   不支持反斜杠字符,因为它们不是标准字符   SQL。 BLOB文字是包含十六进制数据和字符串文字的字符串文字   前面有一个“x”或“X”字符。 ......字面值可以   也是令牌“NULL”。

因此,您可以使用字符串替换来转义它,但查询数据库的最佳方法是避免字符串连接以避免Sql injection

最佳做法是使用Parameterized Querys

在sqllite-net中,它们作为参数传递,方法为:

var allUsers = await db.QueryAsync<Customer>("Select * From Customer Where CompanyName ='?'", Company);