Search code examples
c#sql-serversp-executesql

C# how to call “sp_executesql” with custom parameters and sql body


I am trying to execute a dynamic SQL from C# and I want to use sp_executesql because I want to pass a list of strings to be used for an IN statement in the dynamic SQL passed to sp_executesql.

The thing is that I don't know exactly how to do this.

So far I did it like this:

using (var dbCommand = databaseConnection.CreateCommand())
{
    dbCommand.CommandType = CommandType.StoredProcedure;
    dbCommand.CommandText = "sp_executesql";

    var sqlParam = dbCommand.CreateParameter();
    sqlParam.DbType = DbType.String;
    sqlParam.ParameterName = "stmt";
    sqlParam.Value = sql.SQL;
    dbCommand.Parameters.Add(sqlParam);

    var incidentIdParam = dbCommand.CreateParameter();
    incidentIdParam.ParameterName = "incidentId";
    incidentIdParam.DbType = DbType.Int32;
    incidentIdParam.Value = arguments.filterAttributes.incidentId;
    dbCommand.Parameters.Add(incidentIdParam);

    dbCommand.ExecuteReader();
}

Is it possible like this?


Solution

  • As an option, you can format your SQL on the client side and pass to the stored procedure ready string. For example:

    sql.SQL = "UPDATE ORDERS SET STATUS = 1 WHERE ID = %param%";
    

    then

    sqlParam.Value = sql.SQL.Replace("%param%", arguments.filterAttributes.incidentId.ToString());