.net到SQL Server:優化存儲過程表參數傳遞
>將數據庫遷移到SQL Server 2008通常需要在存儲過程中利用表值參數才能有效數據傳輸。 這種方法可顯著提高諸如逗號分隔字符串之類的較舊方法的性能,這些方法現已被認為已過時。
本文演示瞭如何在.NET代碼中使用或DataTable
和DbDataReader
的使用: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中文網其他相關文章!