zoukankan      html  css  js  c++  java
  • 快速找出DataTable中的重复行 【值得收藏】

    public override DataTable GetUserDataDTList(string excelPath)
    02.
    03. {
    04.
    05. excelPath = excelPath.Trim();
    06.
    07. string filename = null;
    08.
    09. try
    10.
    11. {
    12.
    13. filename = System.Configuration.ConfigurationSettings.AppSettings["filename"].ToString();
    14.
    15. }
    16.
    17. catch(Exception ex)
    18.
    19. {
    20.
    21. filename = null;
    22.
    23. throw ex;
    24.
    25. }
    26.
    27. DataTable dt = new DataTable();
    28.
    29. //DataSet ds = new DataSet();
    30.
    31. if (string.IsNullOrEmpty(excelPath))
    32.
    33. {
    34.
    35. dt = null ;
    36.
    37. //ds = null;
    38.
    39. }
    40.
    41. else
    42.
    43. {
    44.
    45. try
    46.
    47. {
    48.
    49. string strConn = @"Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties = 'Excel 12.0;HDR=Yes;IMEX=1;'";
    50.
    51. using(OleDbConnection oconn = new OleDbConnection(strConn))
    52.
    53. {
    54.
    55. OleDbCommand ocmd = null;
    56.
    57. oconn.Open();
    58.
    59. try
    60.
    61. {
    62.
    63. ocmd = new OleDbCommand("SELECT * FROM ["+filename+"$]", oconn);//在web.config中配置
    64.
    65. OleDbDataAdapter oda = new OleDbDataAdapter(ocmd);
    66.
    67. oda.Fill(dt);
    68.
    69. }
    70.
    71. catch(OleDbException oex)
    72.
    73. {
    74.
    75. dt = null;
    76.
    77. throw oex;
    78.
    79. //ds = null;
    80.
    81. }
    82.
    83. finally
    84.
    85. {
    86.
    87. oconn.Close();
    88.
    89. ocmd.Dispose();
    90.
    91. }
    92.
    93. }
    94.
    95. }
    96.
    97. catch(Exception ex)
    98.
    99. {
    100.
    101. throw ex;
    102.
    103. }
    104.
    105. }
    106.
    107. //return ds.Tables[0];
    108.
    109. return dt;
    110.
    111. }

    说明:该方法需要一个参数用来获取Excel文件的路径,找到后放到一个DataTable中。  对于第二条,为了提高性能,我是这样实现的,每次遍历时只跟它后面的数据比较,因为它前面的数据已经跟它比较过了,没必要它再跟前面的数据比较

    /// <summary>
    02.
    03. /// 查看Excel文件中重复的数据
    04.
    05. /// 该方法只是比较编号和客户名称,其他字段没有比较
    06.
    07. /// </summary>
    08.
    09. /// <param name="excelPath">string:Excel文件路径</param>
    10.
    11. /// <returns>ArrayList:重复行组成的动态数组</returns>
    12.
    13. public static ArrayList arrCFData(string excelPath)
    14.
    15. {
    16.
    17. ArrayList arrUserData = new ArrayList();
    18.
    19. excelPath=excelPath.Trim();
    20.
    21. if (string.IsNullOrEmpty(excelPath))
    22.
    23. {
    24.
    25. arrUserData = null;
    26.
    27. }
    28.
    29. else
    30.
    31. {
    32.
    33. string ret = null;
    34.
    35. DataTable dtCompInfo = null;
    36.
    37. try
    38.
    39. {
    40.
    41. dtCompInfo = DF.DBFactory.GetCompanyDAO().GetUserDataDTList(excelPath);
    42.
    43. if(dtCompInfo!=null&&dtCompInfo.Rows.Count>0)
    44.
    45. {
    46.
    47. int count = dtCompInfo.Rows.Count;
    48.
    49. int x, y;
    50.
    51. for (int i = 0; i < count;i++ )
    52.
    53. {
    54.
    55. for (int j = i + 1; j < count; j++)
    56.
    57. {
    58.
    59. if (dtCompInfo.Rows[i][0].ToString().Equals(dtCompInfo.Rows[j][0].ToString()) && dtCompInfo.Rows[i][3].ToString().Equals(dtCompInfo.Rows[j][3].ToString()))
    60.
    61. {
    62.
    63. x = i + 2;
    64.
    65. y = j + 2;
    66.
    67. ret = string.Format("Excel数据中第{0}行和第{1}行数据重复",x, y);
    68.
    69. arrUserData.Add(ret);
    70.
    71. break;
    72.
    73. }
    74.
    75. }
    76.
    77. //arrUserData.Add(dtCompInfo.Rows[i][0].ToString() + "出来吧" + dtCompInfo.Rows[i][3].ToString());
    78.
    79.
    80.
    81. }
    82.
    83. }
    84.
    85. }
    86.
    87. catch(Exception ex)
    88.
    89. {
    90.
    91. ExceptionManager.SaveException(ex, "Company.cs", ex.Message);
    92.
    93. arrUserData = null;
    94.
    95. }
    96.
    97. finally
    98.
    99. {
    100.
    101. dtCompInfo = null;
    102.
    103. }
    104.
    105. }
    106.
    107. return arrUserData;
    108.
    109. }
  • 相关阅读:
    python模块
    python函数进阶
    python函数
    六.python的深浅拷贝
    五.集合及其推导式
    IOS微信显示NAN,中国标准时间日期转换
    Caused by: org.apache.ibatis.binding.BindingException: Parameter 'XXX' not found. Available parameters are [beginTime, endTime, param3, param1, vesselName, param2] 找不到参数的解决方式
    java的nullpointerexception空指针异常,关于使用了timer定时导致service调用问题
    java设置开始时间,定时执行任务
    java多层嵌套集合的json,如何获取多层集合中所需要的value
  • 原文地址:https://www.cnblogs.com/Mr0909/p/2041523.html
Copyright © 2011-2022 走看看