Se você usar instruções parametrizadas corretamente , você não precisa se preocupar com isso. Algo assim (embora, por favor, não aprenda técnicas de C# comigo):
string sql = @"UPDATE dbo.table SET col = @p1 WHERE ...;";
string myString = @"hello'foo""bar";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.CommandType = CommandType.Text;
SqlParameter p1 = cmd.Parameters.AddWithValue("@p1", myString);
cmd.ExecuteNonQuery();
(Embora você realmente deva usar procedimentos armazenados.)
Se você está construindo suas strings manualmente (o que você realmente não deveria estar fazendo), você precisa escapar dos delimitadores de string dobrando-os:
INSERT dbo.tbl(col) VALUES('hello''foo"bar');