在 C# 中优化数据库插入:单一参数化查询方法
将大量行单独插入数据库的效率很低。 本文演示了一种在 C# 中使用单个参数化查询来实现批量插入的高性能方法。
关键是利用存储过程和表值参数。 这种方法涉及三个主要步骤:
定义表类型:
创建自定义 SQL Server 表类型来定义数据结构,指定列名称和数据类型。
创建存储过程:
开发一个存储过程,该过程接受自定义表类型作为只读表值参数。然后,此过程会将数据插入到目标数据库表中。 请记住,表值参数必须为READONLY
。
实现 C# 代码:
在您的 C# 应用程序中:
DataTable
对象,镜像您的自定义表格类型的结构。DataTable
。DataTable
作为表值参数传递。这是说明此过程的示例:
表类型(SQL):
<code class="language-sql">CREATE TYPE MyTableType AS TABLE ( Col1 INT, Col2 VARCHAR(20) ) GO</code>
存储过程 (SQL):
<code class="language-sql">CREATE PROCEDURE MyProcedure (@MyTable MyTableType READONLY) AS BEGIN INSERT INTO MyTable (Col1, Col2) SELECT Col1, Col2 FROM @MyTable; END; GO</code>
C# 代码:
<code class="language-csharp">using System.Data; using System.Data.SqlClient; // ... other code ... DataTable dt = new DataTable(); dt.Columns.Add("Col1", typeof(int)); dt.Columns.Add("Col2", typeof(string)); // Populate dt with your data here... e.g., //DataRow row = dt.NewRow(); //row["Col1"] = 1; //row["Col2"] = "Value1"; //dt.Rows.Add(row); using (SqlConnection con = new SqlConnection("ConnectionString")) { using (SqlCommand cmd = new SqlCommand("MyProcedure", con)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@MyTable", dt); //AddWithValue handles type inference con.Open(); cmd.ExecuteNonQuery(); } }</code>
此方法通过减少数据库往返次数显着提高数据库插入效率,从而实现更快、更可扩展的数据处理。
以上是如何使用 C# 高效地将多个参数化行插入数据库?的详细内容。更多信息请关注PHP中文网其他相关文章!