如何将带有(’)的字符串插入sql数据库?

我的字符串由(’)引用标记组成,如“母亲的爱”……

从c#通过sql查询插入数据时。 它显示错误。 如何纠正问题并成功插入此类数据?

string str2 = "Insert into tblDesEmpOthDetails (EmpID, Interviewnotes) values ('" + EmpId + "','" + Interviewnotes + "')"; 

面试笔记的内容包括“母亲的爱”(单引号)。 执行此查询时,它将错误显示为“字符串后的未闭合引号”)“如何插入此类型的字符串?

我很确定你不使用SQL参数:

 using (SqlCommand myCommand = new SqlCommand( "INSERT INTO table (text1, text2) VALUES (@text1, @text2)")) { myCommand.Parameters.AddWithValue("@text1", "mother's love"); myCommand.Parameters.AddWithValue("@text2", "father's love"); //... myConnection.Open(); myCommand.ExecuteNonQuery(); //... } 

使用命名参数和SqlParameter。

来自http://www.dotnetperls.com/sqlparameter

 class Program { static void Main() { string dogName = "Fido"; // The name we are trying to match. // Use preset string for connection and open it. string connectionString = ConsoleApplication1.Properties.Settings.Default.ConnectionString; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // Description of SQL command: // 1. It selects all cells from rows matching the name. // 2. It uses LIKE operator because Name is a Text field. // 3. @Name must be added as a new SqlParameter. using (SqlCommand command = new SqlCommand("SELECT * FROM Dogs1 WHERE Name LIKE @Name", connection)) { // Add new SqlParameter to the command. command.Parameters.Add(new SqlParameter("Name", dogName)); // Read in the SELECT results. SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { int weight = reader.GetInt32(0); string name = reader.GetString(1); string breed = reader.GetString(2); Console.WriteLine("Weight = {0}, Name = {1}, Breed = {2}", weight, name, breed); } } } } } 

虽然,你可以用两个’字符(”)替换字符串中的所有’字符,但这不是一个好主意。 由于这个问题以及许多其他原因(例如避免SQL注入攻击),您肯定应该使用命名参数,而不是通过将它们直接连接到字符串中来将值添加到insert语句中。 例如:

 command.CommandText = "Insert into tblDesEmpOthDetails (EmpID, Interviewnotes) values (@EmpId, @Interviewnotes)"; command.Parameters.AddWithValue("EmpId", EmpId); command.Parameters.AddWithValue("Interviewnotes", Interviewnotes); 

将此行添加到您尝试输入的字符串中

说你的字符串是

 string test = "that's not working correctly" test = replace(Request.QueryString(test), "'", "''") 

然后现在测试

 "that''s not working correctly" 

这在SQL语法上是正确的

问候

作为答案的一个变体(非常正确地)指出你的参数:如果这看起来很多工作,那么用一个工具如dapper来 避免它

 int empId = 123; string notes = "abc"; connection.Execute(@"insert into tblDesEmpOthDetails (EmpID, Interviewnotes) values (@empId, @notes)", new {empId, notes}); 

Dapper将自动获取empIdnotes (来自匿名对象)并将它们添加为命名/类型参数。 类似的Query / Query扩展方法也允许直接进行对象模型的简单和高度优化的查询

你需要使用双倍”

 INSERT INTO something (Name) VALUES ('O''something''s') 

这将插入O’something。 我读的另一个例子是:

让我们假设我们有一个字符串:

 SQL = "SELECT * FROM name WHERE LastName='" & LastName & "' " 

如果我们的名字像奥布莱恩,奥莱利等,我们就像字符串一样

 SELECT * FROM name WHERE LastName='O'Brien' 

第二个’将结束SQL语句。 所以这里最简单的解决方案是使用double”然后我们会有这样的字符串:

 SELECT * FROM name WHERE LastName='O''Brien'