Heim >Backend-Entwicklung >C++ >Wie übergeben Sie die Tabellenwertparameter effizient an SQL Server gespeicherte Prozeduren von .NET?

Wie übergeben Sie die Tabellenwertparameter effizient an SQL Server gespeicherte Prozeduren von .NET?

Linda Hamilton
Linda HamiltonOriginal
2025-01-31 00:21:08319Durchsuche

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

.NET an SQL Server: Optimierung der Parameter des gespeicherten Prozedurtabelle

Migration von Datenbanken in SQL Server 2008 erfordert häufig die Nutzung von Parametern der Tabellen innerhalb gespeicherter Prozeduren für eine effiziente Datenübertragung. Dieser Ansatz verbessert die Leistung über ältere Methoden wie von Kommas getrennte Zeichenfolgen, die jetzt als veraltet gelten.

Dieser Artikel zeigt, wie Daten mit DataTable, DbDataReader oder IEnumerable<SqlDataRecord> in Ihrem .NET -Code effektiv an gespeicherte Prozeduren übergeben werden. Das folgende Beispiel zeigt die Verwendung von DataTable und 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>

Durch Einstellen von SqlDbType auf Structured und zu Mapping TypeName auf den entsprechenden Tabellentyp, der in Ihrem gespeicherten Prozedur definiert ist (dbo.PageViewTableType in diesem Beispiel), gewährleisten Sie eine nahtlose und optimierte Datenübertragung. Diese Methode garantiert eine effiziente und zuverlässige Kommunikation zwischen Ihrer .NET -Anwendung und den gespeicherten SQL Server -Verfahren.

Das obige ist der detaillierte Inhalt vonWie übergeben Sie die Tabellenwertparameter effizient an SQL Server gespeicherte Prozeduren von .NET?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn