void opt_gridview1()
{
string myConnection = "datasource= localhost;port=3306;username=root;password=root";
MySqlConnection myConn = new MySqlConnection(myConnection);
MySqlCommand SelectCommand = new MySqlCommand("select * from bs.buffer where type='buffer'", myConn);
MySqlDataReader myReader;
myConn.Open();
string a;
myReader = SelectCommand.ExecuteReader();
while (myReader.Read())
a = myReader.GetString(1);
myConn.Close();
double sum_petrol = 0;
for (int i = 0; i < dataGridView1.Rows.Count; ++i)
{
sum_petrol += Convert.ToDouble(dataGridView1.Rows[i].Cells[5].Value);
}
this.label8.Text = String.Format("{0:n2}", sum_petrol+a);
}
通过适当的缩进,您可以看到在代码中有一个路径,其中变量a
没有初始化。
编译器在编译时无法知道你的myReader.Read()
是返回true还是false,并且注意到这个事实会阻塞你的编译,直到你修复了这个错误。
....
string a;
myReader = SelectCommand.ExecuteReader();
while (myReader.Read())
a = myReader.GetString(1);
...
this.label8.Text = String.Format("{0:n2}", sum_petrol+a);
您可以通过使用空字符串初始化变量a
来轻松地修复它
string a = string.Empty;
然而,其中的一部分,最后一行你用字符串添加double的地方让我感到困惑。
它似乎起作用了,可能是由于一些不太为人所知的弦规则。格式,但我会试着改变它。如果阅读器在索引1处返回的字段是一个数值,我建议使用适当类型的变量。
在while
循环中初始化a
变量。但是不能保证您的代码会进入循环。您可以在创建变量时初始化它:
string a = string.Empty;
或
string a = null;