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