2014-12-20 46 views
0

我有這個奇怪的錯誤,它不會與其他問題中的任何錯誤進行比較。 我很確定我做得正確,但一直給我這個錯誤。 繼承人我的代碼:即使在調用Read()之前調用Read()之前訪問字段的嘗試也是無效的()

myconn.Open(); 
      Bidreader = command.ExecuteReader(); 


      Maxbids.Clear(); 
      bidders.Clear(); 
      Minbids.Clear(); 
      Bidreader.Read(); 
      Maxbids.Add(Convert.ToInt16(Bidreader["Maxbid"].ToString())); 
      Minbids.Add(Convert.ToInt16(Bidreader["Minbid"].ToString())); 
      bidders.Add(Bidreader["Name"].ToString()); 
      Bidreader.Read(); 
      Maxbids.Add(Convert.ToInt16(Bidreader["Maxbid"].ToString())); 
      Minbids.Add(Convert.ToInt16(Bidreader["Minbid"].ToString())); 
      bidders.Add(Bidreader["Name"].ToString()); 
      Bidreader.Close(); 

      Bidreader.Close(); 
      myconn.Close(); 

我得到的錯誤是:調用read()

喔之前訪問一個字段 無效嘗試,我忘了寫,這個代碼在timer_tick 。

更新!!: 現在我已經重寫了,從你們的幫助:

public partial class MainWindow 
{ 
    string Currentitem; 
    int Timeleftint; 
    int Highestbid = 0; 
    int WinnerBid; 
    int Givenitems; 
    List<int> Maxbids = new List<int>(); 
    List<int> Minbids = new List<int>(); 
    List<string> bidders = new List<string>(); 
    string Highestbidder = "None"; 
    System.Windows.Threading.DispatcherTimer Itemtimer = new System.Windows.Threading.DispatcherTimer(); 
    System.Windows.Threading.DispatcherTimer Bidcheck = new System.Windows.Threading.DispatcherTimer(); 

    public MainWindow() 
    { 
     InitializeComponent(); 


    } 


private void Bidcheck_Tick(object sender, EventArgs e) 
    { 
     string MyConnection = ""; 
     MySqlConnection myconn = new MySqlConnection(MyConnection); 
     MySqlCommand command = myconn.CreateCommand(); 
     command.CommandText = "SELECT Name,MinBid,MaxBid,Item FROM bids WHERE Item ='" + Currentitem + "' ORDER BY MaxBid DESC"; 

      myconn.Open(); 
      MySqlDataReader Bidreader = command.ExecuteReader();    
      Maxbids.Clear(); 
      bidders.Clear(); 
      Minbids.Clear(); 

      Bidreader.Read(); 
      while (Bidreader.Read()) 
      { 
       Maxbids.Add(Convert.ToInt16(Bidreader["Maxbid"].ToString())); 
       Minbids.Add(Convert.ToInt16(Bidreader["Minbid"].ToString())); 
       bidders.Add(Bidreader["Name"].ToString()); 
       } 
      MessageBox.Show(bidders[0] + Maxbids[0] + Minbids[0]); 
      MessageBox.Show(bidders[1] + Maxbids[1] + Minbids[1]); 

      Bidreader.Close(); 
      myconn.Close(); 

現在,我得到一個新的錯誤,這幾乎是更加古怪。 即使我做Bidreader.Read()我仍然得到一個錯誤,因爲Maxbids,Minbids和bidders在試圖在messagebox中顯示時沒有任何索引。我想這意味着這意味着它從不讀取數據。 對嗎?

+0

你關閉它兩次.. – CularBytes

+0

你應該檢查什麼方法'閱讀()'回報。也許數據集中沒有行,所以'DbDataReader'不能獲得任何行。 – dymanoid

+0

你也打電話給Bidreader兩次,刪除第二個。使用一個while循環來讀取你的數據 – prospector

回答

0

如果您沒有使用SqlDataReader,那麼將其更改爲您正在使用的任何版本。用using語句包裝你的連接,添加你的命令然後把這個代碼放在裏面。

Source Example: MSDN

SqlDataReader bidReader = command.ExecuteReader(); 

    if (bidReader.HasRows) 
    { 
     while (bidReader.Read()) 
     { 
      Maxbids.Add(Convert.ToInt16(bidReader["Maxbid"].ToString())); 
      Minbids.Add(Convert.ToInt16(bidReader["Minbid"].ToString())); 
      bidders.Add(bidReader["Name"].ToString()); 
     } 
    } 
+0

你能檢查我的更新嗎?在此先感謝 – Victornor

+0

顯示您的所有代碼,即使初始化最大值,最小值和出價者。即使你的命令屬性。它沒有從查詢中得到任何結果。 – prospector

+0

這是我可以分享的,因爲我有很多數據庫信息。 – Victornor

相關問題