首页 >后端开发 >C++ >如何从.NET有效地将表值参数传递到SQL Server存储的过程?

如何从.NET有效地将表值参数传递到SQL Server存储的过程?

Linda Hamilton
Linda Hamilton原创
2025-01-31 00:21:08263浏览

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