最近完成了公司內部crm,感覺收穫不少,拿出來給大家分享一下,也方便日後檢視有些地方可能說的不太準確,還請大家指教。 總的說來有以下五條: 1.讀取excel檔案中資料並放到datatable中; 2.快速找出datatable中的重複行; 3.比較excel檔案中重複行時遇到的問題; 4.對「i++」和「i++」的重新認識; 5.嘗試利用事務來插入資料; 解析:
對於第1條,我是從網上找的,發現網上98%都是採用oledb方式實現,我稍微改造了一下,**如下:
public override datatable getuserdatadtlist(string excelpath)
catch(exception ex)
datatable dt = new datatable();
//dataset ds = new dataset();
if (string.isnullorempty(excelpath))
else
catch(oledbexception oex)
finally}}
catch(exception ex)
}//return ds.tables[0];
return dt;
}
說明:該方法需要乙個引數用來獲取excel檔案的路徑,找到後放到乙個datatable中。 對於第二條,為了提高效能,我是這樣實現的,每次遍歷時只跟它後面的資料比較,因為它前面的資料已經跟它比較過了,沒必要它再跟前面的資料比較/// /// 檢視excel檔案中重複的資料
/// 該方法只是比較編號和客戶名稱,其他字段沒有比較
///
/// string:excel檔案路徑
/// arraylist:重複行組成的動態陣列
public static arraylist arrcfdata(string excelpath)
else
行和第行資料重複",x, y);
arruserdata.add(ret);
break;}}
//arruserdata.add(dtcompinfo.rows[i][0].tostring() + "出來吧" + dtcompinfo.rows[i][3].tostring());}}
}catch(exception ex)
finally
}return arruserdata;
}
說明:該演算法的時間複雜度o(n)=n-1 + n-2 + n-3 +……+0=n *(n-1+0)/2 對於第3條:在查詢excel資料中重複行時,確實鬱悶了一下午:明明兩行資料一樣,可就是檢測不出來。後來請教了乙個牛b同事,才發現原來是對excel單元格格式不了解造成的。單元格都有預設格式,如果直接取單元格資料進行比較的話很容易出現錯誤。因為可能單元格的資料型別可能不一致,對於數字「1」在整型單元格中是「1」,但是在浮點型別中是「1.0」,如果直接比較就會認為不一致,所以用下面的方法將檢查不出來:
if (dtcompinfo.rows[i][0].equals(dtcompinfo.rows[j][0]) && dtcompinfo.rows[i][3].equals(dtcompinfo.rows[j][3]))
行和第行資料重複",x, y);
arruserdata.add(ret);
break;
}
if (dtcompinfo.rows[i][0].tostring().equals(dtcompinfo.rows[j][0].tostring()) && dtcompinfo.rows[i][3].tostring().equals(dtcompinfo.rows[j][3].tostring(
行和第行資料重複",i+2, j+2);
arruserdata.add(ret);
break;
} 說明:這樣,執行完**後還是差兩行。想了一下原來是在把資料放到資料插到arruserdata(乙個動態陣列)之後才執行」i+2「和」j+2「,所以獲取arruserdata中的值仍然比實際行數差2. 對於第五條:沒啥好說的就是用事務來實現插入,一旦有異常回滾已經插入的資料,說實話,我是第一次使用事務,所以有必要總結一下 總結:手都酸了,洗澡睡覺,迎接明天的挑戰
快速找出DataTable中的重複行 值得收藏
public override datatable getuserdatadtlist string excelpath 02.03.16.17.catch exception ex 18.19.26.27.datatable dt new datatable 28.29.dataset ds ne...
c 快速去掉DataTable 內容中 前後空格
一直一來data table 都是for 迴圈一條條,乙個乙個column的的for 下去進行 trim,發現這個做法非常非常影響效率,只要datatable裡面有1000條記錄,然後column超過 20條個,format的trim的效率就非常慢。if olddtable.rows k j nul...
DataTable中DefaultValue的使用
需要給某資料來源datatable新增一列,並設定預設值。dt.columns.add columnname typeof boolean dt.columns columnname defaultvalue false 發現這樣各種嘗試設定defaultvalue 值都沒有用,除錯 看dt裡新增c...