J'essaye d'envoyer un ensemble de résultats de requête dans un courrier électronique en utilisant SSIS. Voici la capture d'écran et les étapes pour le flux.Un blocage a été détecté lors de la tentative de verrouillage des variables. Un verrou ne peut pas être acquis après 16 tentatives. Les verrous ont expiré
Screenshot:
Étapes: 1. A l'aide tâche SQL pour obtenir les résultats de la requête dans l'objet "QueryResult" Variable 2. Utilisation de la variable d'objet "QueryResult" dans la boucle Foreach et d'obtenir les valeurs des colonnes dans les variables de chaîne "ProjectRefID" et "Numéro de compte"
3.Grâce scri pt tâche à l'intérieur du conteneur ForEachLoop pour capturer les données dans la variable d'objet « résultat de la requête »
est le code ci-dessous dans la tâche de script que je copiais de la l'Internet.
en utilisant System; en utilisant System.Data; en utilisant Microsoft.SqlServer.Dts.Runtime; en utilisant System.Windows.Forms;
endregion
namespace ST_77e6b4ea18824b909adc5568475fcf5c { [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase { public void Main() { Variables varCollection = null; string header = string.Empty; string message = string.Empty; Dts.VariableDispenser.LockForWrite("User::ValidationEmailMessage"); Dts.VariableDispenser.LockForRead("User::Accountnumber"); Dts.VariableDispenser.LockForRead("User::ProjectRefID"); Dts.VariableDispenser.GetVariables(ref varCollection); if (varCollection["User::ValidationEmailMessage"].Value == string.Empty) { header = "Below are the list of Invalid ProjecRefID and Accountnumbers that are not matching with our existing data:\n\n"; header += string.Format("{0}\t{1}\t\t\t{2}\n", "ProjectRefID", "Accountnumber"); varCollection["User::ValidationEmailMessage"].Value = header; varCollection.Unlock(); } //Format the query result with tab delimiters message = string.Format("{0}\t{1}\t{2}", varCollection["User::ProjectRefID"].Value, varCollection["User::Accountnumber"].Value); varCollection["User::ValidationEmailMessage"].Value = varCollection["User::ValidationEmailMessage"].Value + message; varCollection.Unlock(); Dts.TaskResult = (int)ScriptResults.Success; } enum ScriptResults { Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success, Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure }; }
}
J'ai essayé de résoudre cette erreur, mais de toute façon je ne suis pas en mesure de comprendre. Faites-moi savoir si quelqu'un sait comment le résoudre.