枚举一下两个段之间 所有可能的关系,然后用SQL查就是了,太简单了

解决方案 »

  1.   

    重复的情况就是Append.Sect.End 大于等于 Database.Sect.Start 并且Append.Sect.Start 小于等于 Database.Sect.End
      

  2.   

    ADO.NET 中是不是要把整个DataSet查一次呢
      

  3.   

    fireyan(尘世中一个迷途的小书童) 发来看看
      

  4.   

    string SQL="SELECT BEGINDATE,ENDDATE FROM MEST_SD_MACHINESTOP WHERE MEST_PB_ORGID=" + ORGID + " AND PM_MP_MACHINE_ID=" + (f.ControlList["PM_MP_MACHINE_ID"] as Xceed.Grid.Editors.GridComboBox).SelectedValue.ToString() + " AND BEGINSHIFT=" + (f.ControlList["BEGINSHIFT"] as Xceed.Grid.Editors.GridComboBox).SelectedValue.ToString() + " AND STOPTYPE=" + (f.ControlList["STOPTYPE"] as Xceed.Grid.Editors.GridComboBox).SelectedValue.ToString() + " AND NOT MEST_SD_MACHINESTOPI=" + (f.freePanel.nowGrid.CurrentRow as Xceed.Grid.DataRow).Cells[0].Value.ToString();
    DataTable table=ExeSQL(f,SQL);
    if (table!=null)

    string msg="";
    int count=0;
    string machine=(f.ControlList["PM_MP_MACHINE_ID"] as Xceed.Grid.Editors.GridComboBox).Text;
    string shift=(f.ControlList["BEGINSHIFT"] as Xceed.Grid.Editors.GridComboBox).Text;
    string stop=(f.ControlList["STOPTYPE"] as Xceed.Grid.Editors.GridComboBox).Text;
    foreach (DataRow row in table.Rows)
    {
    DateTime Begin=DateTime.Parse(row[0].ToString());
    DateTime End=DateTime.Parse(row[1].ToString());
    if ((DateTime.Compare(StartDay,Begin)>=0 && DateTime.Compare(StartDay,End)<=0) || (DateTime.Compare(StartDay,Begin)<=0 && DateTime.Compare(EndDay,Begin)>=0))
    {
    ++count;
    msg+=count.ToString() + ".  " + Begin.ToString("yyyy年MM月dd日") + "  -->  " + End.ToString("yyyy年MM月dd日") + "      \t" + machine + "  \t" + stop + "\t" + shift + "\n";
    }
    }
    if (count>0)
    {
    MessageBox.Show("在机台、停用类型、开始班次相同的情况下,共有 " + count.ToString() + " 条记录与本记录在时间上存在重复。\n重复记录如下:\n\n" + msg,"记录重复!",MessageBoxButtons.OK,MessageBoxIcon.Information);
    return new ReturnObject(false);
    }
    }
      

  5.   

    #region 验证数据
    /// <summary>
    /// 验证需要插入的尾码段是否出现重复
    /// </summary>
    /// <param name="insterParameter">需要插入的参数数组</param>
    /// <returns>返回ture表示重复,返回false表示第一次新建或不重复</returns>
    public  bool GetQueryCaudalCode(Parameter[] insterParameter)
    {
    if(insterParameter.Length==0)
       {
    throw new ArgumentNullException("insterParameter");
       }
    int    aCaudalStart  = 0;
    int    aCaudalEnd    = 0;
    bool    StartValue   = false;
    if(insterParameter.Length == 0)
    {
    throw new ArgumentNullException("insterParameter");
    }
    RC_PCSSFZWMDFPBData theDS=new IdentityIdDA().GetRC_PCSSFZWMBInfo(RC_PCSSFZWMDFPBData.TABLE_RC_PCSSFZWMDFPB,0);
    if(theDS == null && theDS.Tables[0].Rows.Count < 0)
    {
    return false;
    }
    else
    {
    for(int i=0; i<insterParameter.Length;i++)
    {
    if(insterParameter[i].ParameterName==RC_PCSSFZWMDFPBData.F_SFZWMQSH)
    {
     aCaudalStart =int.Parse( insterParameter[i].ParameterValue.ToString());
    }
    if(insterParameter[i].ParameterName==RC_PCSSFZWMDFPBData.F_SFZWMZZH)
    {
         aCaudalEnd = int.Parse(insterParameter[i].ParameterValue.ToString());
    }
    }
    foreach(DataRow aRow in theDS.Tables[RC_PCSSFZWMDFPBData.TABLE_RC_PCSSFZWMDFPB].Rows)
    {

    int  CaudalStart = int.Parse(aRow[RC_PCSSFZWMDFPBData.F_SFZWMQSH].ToString());
    int  CaudalEnd   = int.Parse(aRow[RC_PCSSFZWMDFPBData.F_SFZWMZZH].ToString());
    if(aCaudalStart >= CaudalStart && aCaudalStart <=CaudalEnd)
    {
    StartValue=true;
    }
    if(aCaudalStart < CaudalStart && aCaudalEnd < CaudalEnd && aCaudalEnd > CaudalStart)
    {
    StartValue=true;
    }
    }
    return StartValue;
    } }
    #endregion
    我写了一个