我遇到了这个奇怪的错误,与其他问题中的任何错误都无法比较。 我很确定我正确地做到了,但一直给我这个错误。 继承我的代码:
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 :(得分:0)
如果您不使用SqlDataReader,请将其更改为您正在使用的内容。将您的连接包含在using语句中,添加您的命令,然后将此代码放入其中。
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());
}
}