none
查找重复数据项的问题! RRS feed

  • 问题

  • 连接了一个数据库到窗体,定义了textbox的数据源,在录入的时候,需要判断是否有重复数据,比如姓名。

    采用的方法是,建立一个新的bindingsource,然后对新建立的bindingsource使用filter方法,当新建立的bindingsource.count>1时,用msgbox提示有数据重复。问题在于,当数据库很大时内存占用的太多了,新建了一个bindingsource后内存用得更多了,每运行一次都会多出一点。

    所以想用其他的查找方法,请问,还有没有其他的方法可以实现这个目的呢?

    2010年10月11日 3:56

答案

全部回复

  • 数据太多的话在查询的时候就过滤数据

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2010年10月11日 13:46
    版主
  • 连接了一个数据库到窗体,定义了textbox的数据源,在录入的时候,需要判断是否有重复数据,比如姓名。

    采用的方法是,建立一个新的bindingsource,然后对新建立的bindingsource使用filter方法,当新建立的bindingsource.count>1时,用msgbox提示有数据重复。问题在于,当数据库很大时内存占用的太多了,新建了一个bindingsource后内存用得更多了,每运行一次都会多出一点。

    所以想用其他的查找方法,请问,还有没有其他的方法可以实现这个目的呢?

    hi,

    或许您可以试试LINQ to Object 的Enumerable.Distinct 方法,去除掉重复项目

    http://msdn.microsoft.com/zh-tw/library/system.linq.enumerable.distinct.aspx

       ' Create a list of integers.
       Dim ages As New List(Of Integer)(New Integer() _
                        {21, 46, 46, 55, 17, 21, 55, 55})
    
       ' Select the unique numbers in the List.
       Dim distinctAges As IEnumerable(Of Integer) = ages.Distinct()
    
       Dim output As New System.Text.StringBuilder("Distinct ages:" & vbCrLf)
       For Each age As Integer In distinctAges
         output.AppendLine(age)
       Next
    
       ' Display the output.
       outputBlock.Text &= output.ToString() & vbCrLf
    

     

     


    秘訣無它,唯勤而已
    2010年10月11日 13:46
  • 如何过滤呢?

    如果使用过滤后的bindingsource那么如何保证在数据库中绝对没有重复项呢?还是说新建一张表直接提出需要检索的那一列,去掉其他的列,再进行检索。

    2010年10月12日 3:13
  • 如何过滤呢?

    如果使用过滤后的bindingsource那么如何保证在数据库中绝对没有重复项呢?还是说新建一张表直接提出需要检索的那一列,去掉其他的列,再进行检索。


    hi,

    先把BindingSource转型成DataTable

        Dim binding As New BindingSource
        Dim table As DataTable = TryCast(binding.DataSource, DataTable)
    然后

    你可使用DataView.ToTable()來處理資料,

    http://msdn.microsoft.com/zh-cn/library/h2b6ehaa.aspx

    提供让您参考的DataView使用方法

    http://www.dotblogs.com.tw/yc421206/archive/2009/10/18/11095.aspx
    http://www.dotblogs.com.tw/yc421206/archive/2009/10/18/11097.aspx

     

    另外,下列方法是使用LINQ处理DataTable地方法,您可参考看看。

    1.先使用LINQ to DataSet处理DataTable,
      Dim productNames = From products In table.AsEnumerable() Select products("ProductName")
      http://msdn.microsoft.com/zh-tw/library/system.data.datatableextensions.asenumerable.aspx
    2.然后再使用Linq to Object 的 Distinct 方法,去除重复项目,上述语法变成
      Dim productNames = From products In table.AsEnumerable() Select products("ProductName").Distinct()
      http://msdn.microsoft.com/zh-tw/library/system.linq.enumerable.distinct.aspx

     

     


    秘訣無它,唯勤而已
    2010年10月12日 4:59
  • 多谢两位版主,继续学习。
    2010年10月12日 6:52