ホームページ > バックエンド開発 > C++ > .NETからテーブル値パラメーターをSQL Serverストアドプロシージャに効率的に渡す方法は?

.NETからテーブル値パラメーターをSQL Serverストアドプロシージャに効率的に渡す方法は?

Linda Hamilton
リリース: 2025-01-31 00:21:08
オリジナル
261 人が閲覧しました

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

.net to sql server:ストアドプロシージャテーブルパラメーターの最適化

SQL Server 2008へのデータベースの移行には、効率的なデータ転送のためのストアドプロシージャ内でテーブル値のパラメーターを活用する必要があります。 このアプローチは、現在時代遅れと見なされているコンマ分離された文字列のような古い方法でのパフォーマンスを大幅に向上させます。 この記事では、.NETコードで

、または

を使用して、データをストアドプロシージャに効果的に渡す方法を示しています。 次の例では、DataTableDbDataReaderIEnumerable<SqlDataRecord>の使用を紹介しています。 DataTable 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>
ログイン後にコピー
に設定し、

SqlDbTypeにマッピングして、ストアドプロシージャで定義されている対応するテーブルタイプ(この例ではStructured)に設定することにより、シームレスで最適化されたデータ送信を確保します。 この方法は、.NETアプリケーションとSQLサーバーのストアドプロシージャとの間の効率的で信頼できる通信を保証します。

以上が.NETからテーブル値パラメーターをSQL Serverストアドプロシージャに効率的に渡す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート