gpt4 book ai didi

c# - 从 C# CLR 快速插入

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:21 24 4
gpt4 key购买 nike

我正在处理大量数据,并使用 CLR 对其进行处理。 CLR 处理速度很快,但我需要一种快速的方法将处理后的数据移动到数据库(通过 CLR)。

例如看下面的clr代码

protected static string Normalize(string s) // space and special character remover
{
char[] arr = s.ToCharArray();
arr = Array.FindAll<char>(arr, (c => char.IsLetterOrDigit(c)));
return new string(arr).ToLower();
}

[Microsoft.SqlServer.Server.SqlProcedure]
public static void udpNormStr ()
{
SqlConnection con = new SqlConnection("context connection = true");
SqlCommand cmd = new SqlCommand("Select cName from NamesTable", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
DataTable fill = new DataTable();
fill.Columns.Add("NormName", typeof(string));
da.Fill(dt);
cmd.CommandText = "insert into NormTable values (@nName)";
cmd.Parameters.Add("@nName", SqlDbType.VarChar);
foreach (DataRow row in dt.Rows)
{
fill.Rows.Add(Normalize(row[0].ToString()));
}
con.Open();
foreach (DataRow row in fill.Rows)
{
cmd.Parameters["@nName"].Value = row[0];
cmd.ExecuteNonQuery();
}
con.Close();
}

执行需要花费大量时间,并且将 90% 的时间浪费在插入操作上。请建议将处理后的数据移动到数据库的更好方法(通过 CLR)。

最佳答案

SqlBulkCopy;因为你已经有了一个 DataTable,你可以使用:

using (var bcp = new SqlBulkCopy(con))
{
bcp.DestinationTableName = "NormTable";
bcp.WriteToServer(dt);
}

请注意,对于流式 数据,您还可以创建自定义IDataReader 实现并将其提供给WriteToServer

关于c# - 从 C# CLR 快速插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16585404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com