在调用 Read() 之前访问字段的尝试无效,即使在调用 Read() 之后也是如此

本文关键字:调用 Read 之后 访问 字段 无效 | 更新日期: 2023-09-27 18:34:53

我遇到了这个奇怪的错误,它与其他问题中的任何错误都无法相比。我很确定我做对了,但一直给我这个错误。这是我的代码:

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 和投标人在尝试在消息框中显示它时没有任何索引。我想这意味着这意味着它永远不会读取数据。我说的对吗?

在调用 Read() 之前访问字段的尝试无效,即使在调用 Read() 之后也是如此

如果您不使用SqlDataReader,请将其更改为您正在使用的内容。将连接包装在 using 语句中,添加命令,然后将此代码放入其中。

源示例: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());
        }
    }