c# – 检查重复项并从DataTable中删除数据库表的好方法?
发布时间:2020-12-15 21:55:09 所属栏目:百科 来源:网络整理
导读:我的代码中有一个填充的DataTable: 我正在使用SQL Server CE 4.0并解决性能问题,我正在使用SqlCeBulkCopy: SqlCeBulkCopyOptions options = new SqlCeBulkCopyOptions();options = options |= SqlCeBulkCopyOptions.KeepNulls;// Check for DB duplicatesu
我的代码中有一个填充的DataTable:
我正在使用SQL Server CE 4.0并解决性能问题,我正在使用SqlCeBulkCopy: SqlCeBulkCopyOptions options = new SqlCeBulkCopyOptions(); options = options |= SqlCeBulkCopyOptions.KeepNulls; // Check for DB duplicates using (SqlCeBulkCopy bc = new SqlCeBulkCopy(strConn,options)) { dt = RemoveDuplicateRows(dt,"Email"); bc.DestinationTableName = "Recipients"; bc.WriteToServer(dt); } RemoveDuplicateRows将从DataTable中删除重复项,但不会检查数据库中已存在的内容. 我想在将其传递给WriteToServer(dt)之前,有效地删除DataTable中存在于实际数据库表中的所有项. 什么是这个问题的良好性能,成本效益的解决方案? 解决方法
那么你需要对数据表和现有表格进行调整吗?我不确定sql ce是否支持临时表,我用ms sql做了类似的事情,这里是伪代码
string tmpTableDefinition = "create table #tmpEmails (...)"; using(var connection = new SqlCeConnection(connectionString)) { //Create temp table var tmpTableCommand = new SqlCeCommand(tmpTableDefiniton,connection); tmpTableCommand.ExecuteNonQuery(); //Bulk copy to the temp table,note that bulk copy run faster if the teble is empty //which is always true in this case... using (var bc = new SqlCeBulkCopy(connection,options)) { bc.DestinationTableName = "#tmpEmails"; bc.WriteToServer(dt); } //Run a sp,that have temp table and original one,and marge as you wish in sql //for sp to compile properly,you would have to copy tmp table to script too var spCommand = new SqlCommand("sp_MargeTempEmailsWithOriginal",connection); spCommand.Type = SP //Don't remember exact prop name and enum value spCommand.ExecuteNonQuery(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |