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

时间:2014-12-20 20:58:33

标签: c# sql sqldatareader

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

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中显示时没有任何索引。我想这意味着这意味着它永远不会读取数据。 我是对的吗?

1 个答案:

答案 0 :(得分: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());
        }
    }