首页 >数据库 >mysql教程 >如何使用C#高效地将参数化数据批量插入SQL Server?

如何使用C#高效地将参数化数据批量插入SQL Server?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-12 07:31:47408浏览

How Can I Efficiently Bulk Insert Parameterized Data into SQL Server Using C#?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn