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
Linda Hamiltonoriginal
2025-01-31 00:21:08370parcourir

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>:

<code class="language-csharp">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;
        }
    }
}</code>

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:
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