Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在SQL Server CE表中输入带“(撇号)的数据_C#_Sql Server Ce - Fatal编程技术网

C# 在SQL Server CE表中输入带“(撇号)的数据

C# 在SQL Server CE表中输入带“(撇号)的数据,c#,sql-server-ce,C#,Sql Server Ce,如何将John's shoe等数据作为insert语句输入SQL Server CE表3.5版等不接受在以下语句中使用撇号: INSERT INTO ShowsDB(Item) VALUES('+ "John's shoes" + "') 基本上,您必须避免将数据直接放入SQL中。请改用参数化SQL: // I'm assuming you're opening the connection already string sql = "INSERT INTO ShowDB(ITEM) VALU

如何将John's shoe等数据作为insert语句输入SQL Server CE表3.5版等不接受在以下语句中使用撇号:

INSERT INTO ShowsDB(Item) VALUES('+ "John's shoes" + "')

基本上,您必须避免将数据直接放入SQL中。请改用参数化SQL:

// I'm assuming you're opening the connection already
string sql = "INSERT INTO ShowDB(ITEM) VALUES (@Name)";
using (var command = new SqlCommand(sql, connection))
{
    command.Parameters.Add("@Name", SqlDbType.NVarChar).Value = "John's shoes";
    command.ExecuteNonQuery();
}
使用参数化SQL有三个好处:

避免 避免不必要和危险的字符串转换,特别是对于日期/时间类型 将SQL代码与数据参数分开,这样更易于理解
标准的SQL转义是引号应该加倍,这样您的查询就变得

INSERT INTO ShowsDB(Item) VALUES('+ "John''s shoes" + "')

对于像对DB副本运行SELECT语句来诊断问题这样的事情来说,这是非常好的,但不应该在实际的生产系统中使用。参数化查询是您的朋友。

这允许SQL注入攻击。使用参数化查询,您将减轻攻击,并能够插入单引号。好的,这似乎可行,但我也尝试检查数据是否已经存在且不起作用:var rows=dataTable.SelectItem=+John's shoes;如果行数.Length==0@user1842134:您没有提到使用数据表。我不太喜欢DataTable。选择DataTable正是因为这类东西。你最好只是遍历这些行并检查它们中的每一行。以任何方式使用它们都是一个坏习惯。参数化查询应始终100%使用,即使您知道您的查询是安全的,或者您所在的环境是安全的。只需一个人将一些代码复制/粘贴到您的项目中,您现在就容易受到攻击。如果你养成了一直参数化的习惯,这实际上比使用所有引号和字符转义更容易,你永远不会犯错误。