首页 > 后端开发 > C++ > 如何在 C# 中通过参数化查询高效地批量插入数据?

如何在 C# 中通过参数化查询高效地批量插入数据?

Barbara Streisand
发布: 2025-01-03 21:58:39
原创
611 人浏览过

How Can I Efficiently Bulk Insert Data with Parameterized Queries in C#?

在 C 中将参数化变量批量插入数据库

在 C# 中,如果每行都需要单独的 INSERT,则将多行插入数据库可能是一个耗时的过程陈述。为了优化性能,最好在单个查询中插入多行,同时利用参数化查询来防止 SQL 注入攻击。

为了实现这一点,您可以利用表值参数的强大功能,它允许您将结构化数据类型(例如 DataTable)传递给存储过程。这使您能够使用单个命令插入多行。

要实现此方法,请按照下列步骤操作:

1.创建用户定义的表类型 (UDT)

创建 UDT 来表示要插入的行。例如,如果您有列“Col1”和“Col2”,则可以按如下方式创建 UDT:

CREATE TYPE MyTableType AS TABLE
(
    Col1 int,
    Col2 varchar(20)
)
GO
登录后复制

2。创建存储过程

创建一个存储过程以接受UDT作为参数:

CREATE PROCEDURE MyProcedure
(
    @MyTable dbo.MyTableType READONLY -- Table valued parameters must be ReadOnly!
)
AS

INSERT INTO MyTable (Col1, Col2)
SELECT Col1, Col2 
FROM @MyTable

GO
登录后复制

3.从 C 执行存储过程

用您的数据填充数据表:

DataTable dt = new DataTable();
dt.Columns.Add("Col1", typeof(int));
dt.Columns.Add("Col2", typeof(string));

// Populate data
登录后复制

打开连接并使用 SqlCommand 执行存储过程:

using (var con = new SqlConnection("ConnectionString"))
{
    using(var cmd = new SqlCommand("MyProcedure", con))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@MyTable", SqlDbType.Structured).Value = dt;
        con.Open();
        cmd.ExecuteNonQuery();
    }
}
登录后复制

通过利用表值参数和存储过程,您可以显着提高批量插入的性能,同时还保持参数化的安全性和效率查询。

以上是如何在 C# 中通过参数化查询高效地批量插入数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板