.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中文网其他相关文章!