首先在SQL Server创建用户定义表类型和存储过程,然后在C#中通过DataTable配合SqlDbType.Structured与TypeName传递数据,实现高效批量插入。

在C#中使用存储过程的表值参数(Table-Valued Parameters, TVP),需要在数据库端定义用户自定义表类型,并在存储过程中作为参数接收。C#通过 DataTable 或 DbDataReader 将数据传递给该参数。以下是具体步骤和示例。
示例:
CREATE TYPE dbo.UserListType AS TABLE
(
Id INT,
Name NVARCHAR(50)
);
示例:
<pre class="brush:php;toolbar:false;">
CREATE PROCEDURE dbo.InsertUsers
@Users dbo.UserListType READONLY
AS
BEGIN
INSERT INTO Users (Id, Name)
SELECT Id, Name FROM @Users;
END
示例代码:
<pre class="brush:php;toolbar:false;">
using System;
using System.Data;
using System.Data.SqlClient;
<p>var dataTable = new DataTable();
dataTable.Columns.Add("Id", typeof(int));
dataTable.Columns.Add("Name", typeof(string));</p><p>// 添加数据行
dataTable.Rows.Add(1, "Alice");
dataTable.Rows.Add(2, "Bob");</p><p>using (var connection = new SqlConnection(connectionString))
{
connection.Open();
using (var command = new SqlCommand("InsertUsers", connection))
{
command.CommandType = CommandType.StoredProcedure;</p><pre class="brush:php;toolbar:false;"><code> var parameter = new SqlParameter("@Users", SqlDbType.Structured)
{
TypeName = "dbo.UserListType",
Value = dataTable
};
command.Parameters.Add(parameter);
command.ExecuteNonQuery();
}}
基本上就这些。只要数据库类型和C#传入的数据结构匹配,TVP就能高效传递多行数据,避免多次调用。
以上就是C#中如何使用存储过程的表值参数?如何传递?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号