Impossible d'obtenir la valeur mise à jour de la méthode d'une autre classe

.net ado.net c# sqlbulkcopy

Question

Ci-dessous ma classe:

MsSql.cs:

public class MSSqlBLL
{
    public static long RowsCopied { get; set; }

    public long BulkCopy()
    {
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
        {
            bulkCopy.DestinationTableName = "dbo.Table1";
            bulkCopy.BatchSize = 100;
            bulkCopy.SqlRowsCopied +=
                new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
            bulkCopy.NotifyAfter = 100;
            try
            {
                bulkCopy.WriteToServer(reader);

            }
            return RowsCopied;
        }
    }

    private static void OnSqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
    {
        RowsCopied = RowsCopied + e.RowsCopied;
    }
}

J'appelle la fonction BulkCopy de cette classe et je veux obtenir l'enregistrement actuellement traité dans la variable d'enregistrements affectée.

Par exemple : pour chaque itération de boucle, j'aimerais obtenir les enregistrements affectés dans ma variable affectée.

public class MySqlBLL
{
    public void GetTotalRows()
        {
            int  totalRecords = 500;
            var table = "Table1";
            for (int i = 0; i < totalRecords / 100; i++) //
             {
                     query = "SELECT * FROM " + table + " LIMIT " + 0 + "," + 100;
                     var reader = Execute(conn, query);
                     long affectedRecords = msSql.BulkCopy();
                     reader.Close();
             }
        }
}

Dans la méthode ci-dessus, j'envoie des données par morceaux à la méthode BulkCopy pour effectuer une copie en bloc, mais pour chaque copie en bloc, j'aimerais obtenir le nombre d'enregistrements traités par copie en bloc, mais le problème est que je reçois 0 dans la variable affectéeRecords.

Je souhaite obtenir l'accès aux lignes en cours traitées par une copie en bloc SQL.

Réponse populaire

La propriété RowsCopied n'est mise à jour qu'après la copie de 100 enregistrements (définie à l'aide de NotifyAfter). Si vous placez

Console.WriteLine("Copied {0} so far...", e.RowsCopied);

dans le gestionnaire d'événements OnSqlRowsCopied, vous obtiendrez une progression continue dans le cas de l'application Console. Mais dans votre cas, vous pouvez simplement sélectionner le nombre (*) dans la table source pour afficher le nombre.

- source



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi