我有这行代码获取表的id并将它们提供给一个名为idPuntos的int数组(注意:这个方法夹在其他地方的Open()和Close()方法之间,所以它不是关于那个意义上的数据库)。
public void refreshIds()
{
idInit.Clear();
try
{
SqlCommand getIds = new SqlCommand("SELECT id_punto FROM Puntos", cnn);
SqlDataReader idsReader = getIds.ExecuteReader();
while (idsReader.Read())
{
//idInit is a global ArrayList
idInit.Add(idsReader[0]);
}
//idPuntos is a global array, declared without value
idPuntos = (int[])idInit.ToArray(typeof(int));
//This line works here, I test printed it and got the values I wanted, yet it doesn't work in the following method...
bajaId = idPuntos[0];
}
catch (SqlException)
{
statusbajas.Text = "Hubo un error al recuperar los datos.";
}
}
这不会起作用:
private void listabajas_SelectedIndexChanged(object sender, EventArgs e)
{
//it doesnt work here, and i dont understand why
bajaId = idPuntos[0];
//statusbajas.Text = "es " + listabajas.SelectedIndex.ToString();
}
有什么想法吗?
编辑:如果不工作,我的意思是idPuntos [0]看起来是空的,而它不在第一个,它实际上保存了我喂它的值。
编辑2:问题似乎从构造函数开始。在第一个Close()调用上设置一个断点,让我意识到从那时起就发生了崩溃。
这是我的构造函数:
public AltasPuntos()
{
InitializeComponent();
str = Properties.Settings.Default.SWMConnString;
cnn = new SqlConnection(str);
cnn.Open();
refreshListNombres();
cnn.Close();
cnn.Open();
refreshIds();
cnn.Close();
}
答案 0 :(得分:0)
您需要确保在refreshIds
被解雇之前调用listabajas_SelectedIndexChanged
。
如果您正在使用WinForms,则可以将refreshIds
调用到表单的构造函数中。
这与我在问题中提供的信息中的建议差不多。