OWASP has some information on this strategy. It should always be a last-ditch option (as explained in the article I'm linking to) but if it's your only option...
http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
a quote from the article about it being a last-ditch option
However, this methodology is frail
compared to using parameterized
queries. This technique should only be
used, with caution, to retrofit legacy
code in a cost effective way.
Applications built from scratch, or
applications requiring low risk
tolerance should be built or
re-written using parameterized
queries.
In essence, the argument against this approach is even if you do escape all the known bad input, there's no guarantee that someone won't come up with a way to circumvent it inthe future.
However, to answer your question specifically...
a list of characters to escape is in the article I linked to above.
Edit As noted, the article doesn't provide very good links. However, for SQL Server, this one does: http://msdn.microsoft.com/en-us/library/ms161953.aspx
Note that the list of characters you need to escape will vary based on the DB platform, but it looks like you're using SQL Server, so this should be relevant..
Quote from the article below:
Filtering input may also be helpful in protecting against SQL injection by removing escape characters. However, because of the large number of characters that may pose problems, this is not a reliable defense. The following example searches for the character string delimiter.
private string SafeSqlLiteral(string inputSQL)
{
return inputSQL.Replace("'", "''");
}
LIKE Clauses
Note that if you are using a LIKE clause, wildcard characters still must be escaped:
s = s.Replace("[", "[[]");
s = s.Replace("%", "[%]");
s = s.Replace("_", "[_]");