Come inserire una stringa con (‘) nel database sql?

Ho le stringhe che consistono in (‘) segno di citazione come “l’amore della madre” …

Durante l’inserimento dei dati tramite query SQL da C #. Mostra errore. Come posso correggere il problema e inserire questo tipo di dati con successo?

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

Le note per le interviste consistono in un valore come “L’amore di mamma” (con citazione singola). Durante l’esecuzione di questa query mostra l’errore come “Virgolette uncluse dopo la stringa di caratteri”) “come posso inserire questo tipo di stringhe?

Sono abbastanza sicuro che non usi i parametri 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(); //... } 

Utilizzare i parametri denominati e SqlParameter.

Da 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); } } } } } 

Sebbene, potresti sostituire tutti i ‘caratteri nella stringa con due’ caratteri (”), non è una buona idea. A causa di questo problema e di molti altri motivi (come evitare gli attacchi di SQL injection), è sicuramente necessario utilizzare i parametri denominati anziché aggiungere i valori all’istruzione di inserimento concatenandoli direttamente nella stringa. Per esempio:

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

Aggiungi questa linea a una stringa che stai tentando di inserire

dire che lo string era

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

allora il test è ora

 "that''s not working correctly" 

che è sintatticamente corretto per SQL

Saluti

Come una variante delle risposte che (molto correttamente) ti indicano i parametri: se questo sembra molto lavoro, evitalo con uno strumento come dapper :

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

Dapper prenderà automaticamente empId e notes (dall’object anonimo) e li aggiungerà come parametri nominati / tipizzati. I metodi di estensione Query / Query simili consentono inoltre di eseguire query con estrema semplicità e ottimizzazioni direttamente in un modello a oggetti.

Devi usare il doppio ”

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

Questo inserirà O’something. Un altro esempio che ho letto è:

Supponiamo che abbiamo una stringa:

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

e se abbiamo un cognome come O’Brian, O’Reily ecc. abbiamo una stringa simile

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

il secondo ‘terminerà l’istruzione SQL. Quindi la soluzione più semplice qui è usare double ”, quindi avremo una stringa come questa:

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