首頁 >後端開發 >C++ >如何從.NET有效地將表值參數傳遞到SQL Server存儲的過程?

如何從.NET有效地將表值參數傳遞到SQL Server存儲的過程?

Linda Hamilton
Linda Hamilton原創
2025-01-31 00:21:08262瀏覽

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

.net到SQL Server:優化存儲過程表參數傳遞

>

將數據庫遷移到SQL Server 2008通常需要在存儲過程中利用表值參數才能有效數據傳輸。 這種方法可顯著提高諸如逗號分隔字符串之類的較舊方法的性能,這些方法現已被認為已過時。

本文演示瞭如何在.NET代碼中使用

有效地將數據傳遞到存儲過程中。 下面的示例顯示了DataTableDbDataReader的使用:IEnumerable<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>
,並映射到存儲過程中定義的相應表類型(在此示例中

),您可以確保無縫且優化的數據傳輸。 此方法可以保證.NET應用程序和SQL Server存儲過程之間的有效且可靠的通信。 >

以上是如何從.NET有效地將表值參數傳遞到SQL Server存儲的過程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn