Minor suggestion to use SqlParameterCollection.AddRange to add parameters to the command, instead of Add on each one:
cmd.Parameters.AddRange(
CreateParameter("@foo", foo, SqlDbType.VarChar, 1000),
CreateParameter("@bar", bar, SqlDbType.VarChar),
CreateParameter("@status", format, SqlDbType.TinyInt, 1)
);