2015-05-19 3 views
1

Я пытаюсь сравнить текущее положение следующей позиции fecmov, но не работают, они всегда разные, хотя они не проверяютсравнить две строки выделяются с C# OleDbDataReader

У меня есть этот код:

string FECMOV; 
string filePath = Path.GetDirectoryName(FileUploader.PostedFile.FileName); 
     if (Path.GetExtension(filePath) == ".xls") { 
        con1 = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text;MaxScanRows=0\"", filePath); 
       } 
       else if (Path.GetExtension(filePath) == ".xlsx") { 
        con1 = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=Yes;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text;MaxScanRows=0\"", filePath); 
       } 

       using (OleDbConnection connect = new System.Data.OleDb.OleDbConnection(con1)) { 

        connect.Open(); 

        OleDbCommand command = new System.Data.OleDb.OleDbCommand("select * from [Sheet1$]", connect); 

        using (OleDbDataReader dr = command.ExecuteReader()) { 
         if (dr.HasRows) { 
          while (dr.Read()) { 

           if (dr.IsDBNull(4)) { 
            FECMOV = ""; 
           } 

           else { 
            FECMOV = dr[4].ToString().Trim(); 
           } 
           //this validation I try to compare 
           // the current position with the next     
           //position fecmov, but not working, 


             if (FECMOV[a] != FECMOV[a + 1]) 
             { 
              a=a+1 
             } 
        //They are always different though they are not validate 
            }}} 
+1

FECMOV является строкой, вы сравниваете символ в позиции 'a' с символа в позиции' а + 1'. Вы ожидаете, что ваша строка будет состоять из одного и того же персонажа? – Steve

+0

Да, мне нужно сравнить первый регистр со вторым регистром того же столбца ... – YotiS

ответ

0

Попробуйте это:

public class DataRowComparer : IEqualityComparer<DataRow> 
{ 
    public bool Equals(DataRow x, DataRow y) 
    { 
     var cols = x.Table.Columns.Count; 
     for (var i = 0; i < cols; i++) 
     { 
      if (Convert.ToString(x[i]) != Convert.ToString(y[i])) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 

    public int GetHashCode(DataRow obj) 
    { 
     var hashCode = -1; 

     var cols = obj.Table.Columns.Count; 
     for (var i = 0; i < cols; i++) 
     { 
      if (hashCode == -1) 
      { 
       hashCode = obj[i].GetHashCode(); 
      } 
      else 
      { 
       hashCode = hashCode^obj[i].GetHashCode(); 
      } 
     } 

     return hashCode; 
    } 
} 
+0

Этот ответ не является решением для меня ....... Я не могу использовать datarow, мне нужно читать и сравнивать то же время , передняя строка со второй строкой того же столбца, в этом случае номер столбца 4 я использую excel. – YotiS

Смежные вопросы