views:

2560

answers:

2

I have a text field and its breaking my sql statement. How do i escape all the chars in that field? I am using sqlite with http://sqlite.phxsoftware.com/ in C#

+8  A: 

You should be using a parameter as in:

SQLiteCommand cmd = _connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM MyTable WHERE MyColumn = @parameter";
cmd.Parameters.Add( new SQLiteParameter( "@parameter", textfield ) );
SQLiteDataReader reader = cmd.ExecuteReader();

Using a parametrised SQL will escape all input values and help protect you from SQL injection attacks.

bstoney
What do i do if i have multiple params? do i write cmd.CommandText = "insert ... @parameter ... @parameter"; cmd.Parameters.Add(...);cmd.Parameters.Add(...); ?
acidzombie24
Yes, there should also be an AddRange method available where you can pass an array of params that match the params in the sql statemenet.
Quintin Robinson
You can call Parameters.Add multiple times just as you have asked or use the Parameters.AddRange which accepts an array of parameters.
bstoney
great, thanks! :D
acidzombie24
A: 

You can also replace all single quote delimiters with doubt single quotes (not ").

sql = sql.Replace("'","''");
peiklk
This Method is not recommended, It may lead to strange bugs.
Palani
Not necessarily. If you build your SQL and make the Replace the last step, all should be good. Worked for years without problems. I use the Application Blocks now, so it doesn't matter. :)
peiklk
this method is good if you need to create a SQL safe to dump to a text file or such.
Ramblingwood