首先在SQL Server創(chuàng)建用戶定義表類型和存儲過程,然后在C#中通過DataTable配合SqlDbType.Structured與TypeName傳遞數(shù)據(jù),實現(xiàn)高效批量插入。
在C#中使用存儲過程的表值參數(shù)(Table-Valued Parameters, TVP),需要在數(shù)據(jù)庫端定義用戶自定義表類型,并在存儲過程中作為參數(shù)接收。C#通過 DataTable 或 DbDataReader 將數(shù)據(jù)傳遞給該參數(shù)。以下是具體步驟和示例。
示例:
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>// 添加數(shù)據(jù)行 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(); }
}
基本上就這些。只要數(shù)據(jù)庫類型和C#傳入的數(shù)據(jù)結(jié)構(gòu)匹配,TVP就能高效傳遞多行數(shù)據(jù),避免多次調(diào)用。
以上就是C#中如何使用存儲過程的表值參數(shù)?如何傳遞?的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號