使用 C# 优化 SQL Server 中的批量数据插入
处理大型数据集通常需要高效的数据库插入技术。 在处理网络数据时,参数化查询对于安全性和性能至关重要。本文演示了一种优于常见、低效的逐行方法的方法。
解决低效的单行插入
使用单个 INSERT
语句(例如 INSERT INTO DATABASE('web',@data)
)进行迭代插入速度很慢并且容易受到 SQL 注入的影响。
解决方案:表值参数 (TVP)
SQL Server 2008 及更高版本支持表值参数 (TVP),提供高效的批量插入方法,同时保持参数化以确保安全。
1。定义用户定义表类型 (UDT)
首先创建一个反映目标数据库表结构的 UDT:
<code class="language-sql">CREATE TYPE MyTableType AS TABLE ( Col1 int, Col2 varchar(20) ) GO</code>
2。使用 TVP 创建存储过程
接下来,创建一个接受 TVP 的存储过程:
<code class="language-sql">CREATE PROCEDURE MyProcedure ( @MyTable dbo.MyTableType READONLY -- READONLY is crucial for TVPs! ) AS INSERT INTO MyTable (Col1, Col2) SELECT Col1, Col2 FROM @MyTable GO</code>
3。使用 TVP 的 C# 实现
C# 代码使用 DataTable
在插入之前保存数据:
<code class="language-csharp">DataTable dt = new DataTable(); dt.Columns.Add("Col1", typeof(int)); dt.Columns.Add("Col2", typeof(string)); // Populate the DataTable with your data here using (var con = new SqlConnection("ConnectionString")) { using (var cmd = new SqlCommand("MyProcedure", con)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@MyTable", dt); // Simplified parameter addition con.Open(); cmd.ExecuteNonQuery(); } }</code>
与单独的 INSERT
语句相比,这种方法利用 TVP 实现更快、更安全的批量数据插入。 AddWithValue
的使用简化了参数处理。 请记住将 "ConnectionString"
替换为您的实际连接字符串。
以上是如何使用C#高效地将参数化数据批量插入SQL Server?的详细内容。更多信息请关注PHP中文网其他相关文章!