Maison > développement back-end > C++ > Comment transmettre efficacement les paramètres de valeur de la table aux procédures stockées SQL Server à partir de .NET?

Comment transmettre efficacement les paramètres de valeur de la table aux procédures stockées SQL Server à partir de .NET?

Linda Hamilton
Libérer: 2025-01-31 00:21:08
original
364 Les gens l'ont consulté

How to Efficiently Pass Table Value Parameters to SQL Server Stored Procedures from .NET?

.NET à SQL Server: Optimisation du paramètre de table de procédure stockée Passage

Les bases de données migrateuses vers SQL Server 2008 nécessitent souvent de tirer parti des paramètres à valeur de la table dans des procédures stockées pour un transfert de données efficace. Cette approche améliore considérablement les performances par rapport aux méthodes plus anciennes comme les chaînes séparées par les virgules, qui sont désormais considérées comme obsolètes.

Cet article montre comment transmettre efficacement les données aux procédures stockées en utilisant DataTable, DbDataReader, ou IEnumerable<SqlDataRecord> dans votre code .NET. L'exemple suivant présente l'utilisation de DataTable et IEnumerable<SqlDataRecord>:

using System.Data;
using System.Data.SqlClient;

public class StoredProcedureParameters
{
    public static void ExecuteProcedure(bool useDataTable, string connectionString, IEnumerable<long> ids)
    {
        using (var connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (var command = connection.CreateCommand())
            {
                command.CommandText = "dbo.procMergePageView";
                command.CommandType = CommandType.StoredProcedure;

                SqlParameter parameter;
                if (useDataTable)
                {
                    parameter = command.Parameters.AddWithValue("@Display", CreateDataTable(ids));
                }
                else
                {
                    parameter = command.Parameters.AddWithValue("@Display", CreateSqlDataRecords(ids));
                }
                parameter.SqlDbType = SqlDbType.Structured;
                parameter.TypeName = "dbo.PageViewTableType";

                command.ExecuteNonQuery();
            }
        }
    }

    private static DataTable CreateDataTable(IEnumerable<long> ids)
    {
        var table = new DataTable();
        table.Columns.Add("ID", typeof(long));
        foreach (var id in ids)
        {
            table.Rows.Add(id);
        }
        return table;
    }

    private static IEnumerable<SqlDataRecord> CreateSqlDataRecords(IEnumerable<long> ids)
    {
        var metaData = new SqlMetaData[1];
        metaData[0] = new SqlMetaData("ID", SqlDbType.BigInt);
        var record = new SqlDataRecord(metaData);
        foreach (var id in ids)
        {
            record.SetInt64(0, id);
            yield return record;
        }
    }
}
Copier après la connexion

En définissant SqlDbType sur Structured et en mappant TypeName au type de table correspondant défini dans votre procédure stockée (dbo.PageViewTableType dans cet exemple), vous assurez une transmission de données transparente et optimisée. Cette méthode garantit une communication efficace et fiable entre votre application .NET et les procédures stockées SQL Server.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal