To zależy od bazy danych SQL, z której korzystasz. Na przykład, jeśli chcesz użyć pojedynczego cudzysłowu w MySQL, musisz użyć odwrotnego ukośnika, Dangerous: '
i literą Escape Escape: \'
. W przypadku MS-SQL rzeczy są zupełnie inne, Dangerous: '
uciekł: ''
. Nic nie jest usuwane, gdy w ten sposób unika się danych, to sposób reprezentowania postaci kontrolnej, takiej jak znak zapytania w jej dosłowności.
Oto przykład z użyciem sparametryzowanych kwerend dla MS-SQL i C#, zaczerpnięte z Docs:
private static void UpdateDemographics(Int32 customerID,
string demoXml, string connectionString)
{
// Update the demographics for a store, which is stored
// in an xml column.
string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
+ "WHERE CustomerID = @ID;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
// Use AddWithValue to assign Demographics.
// SQL Server will implicitly convert strings into XML.
command.Parameters.AddWithValue("@demographics", demoXml);
try
{
connection.Open();
Int32 rowsAffected = command.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
MySQL nie jestem świadomy sparametryzowane biblioteki zapytań można wykorzystać. Należy użyć mysql_real_escape_string() lub opointally można użyć tej funkcji .:
public static string MySqlEscape(this string usString)
{
if (usString == null)
{
return null;
}
// SQL Encoding for MySQL Recommended here:
// http://au.php.net/manual/en/function.mysql-real-escape-string.php
// it escapes \r, \n, \x00, \x1a, baskslash, single quotes, and double quotes
return Regex.Replace(usString, @"[\r\n\x00\x1a\\'""]", @"\$0");
}
masz na myśli przekazywania danych, które mogą zawierać apostrofy do kwerendy SQL? Jeśli używasz obiektów SQL Parameter, nie powinno to stanowić problemu. Dostaniesz swoją dezynfekcję, a wszelkie znaczące postacie w twoich danych powinny zostać odpowiednio usunięte. –
Uzgodnione, sparametryzowane zapytania to droga. – driis
Generuję zapytania SQL tylko za pomocą logiki biznesowej. – Jeroen