I have a variable which is an array of string. I want to pass all the values of the variable, concatenating all elements of it into a single string.
But I'm not sure whether this poses risks of SQL injection. My code:
private string concatenateStrings(string[] sa)
{
StringBuilder sb = new StringBuilder();
foreach (string s in sa)
{
if (sb.Length > 0)
{
sb.Append(",");
}
sb.Append("'");
sb.Append(s);
sb.Append("'");
}
return sb.ToString();
}
public void UpdateClaimSts(string[] ids)
{
string query = @"UPDATE MYTABLE
SET STATUS = 'X'
WHERE TABLEID in (" + concatenateStrings(ids) + ")";
OracleCommand dbCommand = (OracleCommand)this.Database.GetSqlStringCommand(query) as OracleCommand;
this.Database.ExecuteNonQuery(dbCommand, this.Transaction);
}
I tried changing the query to use parameterized queries:
string query = @"UPDATE MYTABLE
SET STATUS = 'X'
WHERE TABLEID in (:ids)";
OracleCommand dbCommand = (OracleCommand)this.Database.GetSqlStringCommand(query) as OracleCommand;
dbCommand.Parameters.Add(":ids", OracleType.VarChar).Value = concatenateStrings(ids);
this.Database.ExecuteNonQuery(dbCommand, this.Transaction);
But it does not work. Any ideas?