Como parametrizar consultas OleDB complexas?

Estou tentando refatorar algum código que está usando concatenação de strings para criar comandos SQL (o que o torna vulnerável a uma injeção de SQL). Basicamente, tudo o que estou tentando fazer é substituir todos osstring sqlToExecute = String.Format(..)nstruções @ com um comando SQL e uma lista de parâmetros OleD

Entendo como isso pode ser feito em casos simples comoString.Format("Select * from myTable where id = {0}", id). No entanto, não consegui encontrar um conjunto de bons exemplos para consultas SQL mais complexa

Aqui estão algumas das perguntas que não tenho certeza de como exatamente posso parametrizar:

1. Os parâmetros são usados para o nome da coluna e o alias; O parâmetro consiste em duas variáveis:

    selQueryBldr.AppendFormat("SELECT * FROM {0} {1} 
    INNER JOIN ColChange CC ON CC.TableRecordID = {1}.{2} and CC.EntityID='{3}'",
    entity.StageTableName, stageTableAlias, entity.PrimaryKey, entity.EntityID);

2. O mesmo parâmetro é usado em várias cláusulas SQL IN

SQL Query:

      SELECT A.TablePrefix ...
      FROM Entity E
      INNER JOIN App A
      ON A.AppID = E.AppID
      WHERE E.AppID in (#APPIDS#)

      UNION

      SELECT A.TablePrefix ...
      FROM EntityB EB
      INNER JOIN App A
      ON A.AppID = EB.AppID
      WHERE EB.AppID in (#APPIDS#)

Atualmente, o parâmetro é adicionado ao código usando o método String.Replace ():

    sqlQuery = sqlQuery.Replace("#APPIDS#",idList);

3. Usando variáveis como um nome de parâmetro e um valor de parâmetro:

    StringBuilder dataQuery = new StringBuilder("Select * from {0} WHERE {1}='{2}'",
    tableName, primaryKey[0], changeRow["TableRecordID"]);

4. A variável usou uma parte do parâmetro unicode:

    sSQL = string.Format("SELECT name FROM sysobjects WHERE id = object_id(N'[dbo].[{0}]')",
    sSPName);


Além disso, todos esses exemplos estão usando as classes OleDb (OleDbConnection / OleDbCommand etc.), pelo que entendo os parâmetros nomeados não podem ser usados aqu

questionAnswers(2)

yourAnswerToTheQuestion