2014-08-28 36 views
0

在下面的方法中,我将数据从excel文件导入到列表中。每次txnhdr.SessionNo更改时,我都希望SessionNo更改。这是在IF语句中处理的。虽然在oledbdatareader上循环需要睡眠,所以它不会超前自己

该方法有时会起作用,但在其他时候,IF内部没有被击中,Session也不会改变,除非我放置Thread.Sleep,然后每次都有效。

我看不到我缺少任何东西。

public static void LoadDataFromFile(string testXLDataFile, string sheetName) 
    { 
     string path = Directory.GetCurrentDirectory() + @"\TestData\" + testXLDataFile; 

     var connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';"; 
     var queryString = "select * from [" + sheetName + "]"; 

     using (OleDbConnection connection = new OleDbConnection(connStr)) 
     { 
      OleDbCommand command = new OleDbCommand(queryString, connection); 

      connection.Open(); 
      OleDbDataReader txnReader = command.ExecuteReader(); 

      int? SessionNo = -1; 
      int currSessionNo = -2; 

      while (txnReader.Read()) 
      {      

       var txnhdr = new TxnHeader(txnReader["HostIP"].ToString().Trim(), int.Parse(txnReader["SessionNo"].ToString().Trim()), txnReader["CustID"].ToString().Trim(), txnReader["GroupID"].ToString().Trim(), txnReader["ProfID"].ToString().Trim()); 

       if (currSessionNo != txnhdr.SessionNo) 
       { 
        currSessionNo = txnhdr.SessionNo; 
        SessionNo = new Random().Next(999999, 999999999); 
       } 

       //the rest of the code does not reassign any of the above variables 
       //but if I don't put a Thread.Sleep(100) here, then SessionNo will 
       //not be reassigned a new random number starting at random rows. 

       }//while 
      }//using 
      } //method 

回答

0

该问题与您的数据库代码无关。您每次通过循环创建一个新实例Random

在循环之前创建一个Random实例,并在循环中调用Next()

+0

只有当SessionNumber发生变化时才会调用Random,这就是我想要的。如果会话编号对于5行是相同的,那么Random将被第一次调用,而不是再次调用,直到它再次发生变化。 – user167908 2014-08-28 18:53:45

+1

你仍然需要在循环外部创建'Random'。根据需要调用“下一个”。 – 2014-08-28 19:00:24

+0

好的,谢谢!当我回到我的开发机器时,我会尝试。不过,我不明白我使用Random的方式会如何导致这种事情。它在IF中。如果你喜欢它,解释器可能派上用场。 – user167908 2014-08-28 20:19:15