У меня возникли некоторые проблемы при заполнении списка в форме окна из таблицы в sqlServer. Таблица представляет собой один столбец строковых значений, и, так как я многократно вызываю этот список значений в своем приложении, я настраиваю его как класс, и в конструкторе по умолчанию я заполняю ArrayList значениями из SQL таблица, следующим образом:
class cCaseType
{
public ArrayList aValues = new ArrayList();
public cCaseType()
{
string strConnection = BuildConnectionString();
SqlConnection linkToDB = new SqlConnection(strConnection);
string sqlText = "SELECT * FROM tblCaseTypes;";
SqlCommand sqlComm = new SqlCommand(sqlText, linkToDB);
SqlDataReader sqlReader = sqlComm.ExecuteReader();
MessageBox.Show("Hi");
while (sqlReader.Read())
{
aValues.Add(sqlReader["CaseType"].ToString());
}
sqlReader.Close();
linkToDB.Close();
}
public string BuildConnectionString()
{
cConnectionString cCS = new cConnectionString();
return cCS.strConnect;
}
}
Теперь я знаю, что соединение с базой данных работает, потому что одно и то же соединение используется во всем приложении. Я знаю, что текст команды SQL является корректным, поскольку, когда я выполняю его в SQL Management Studio, он возвращает все значения в таблице, как и ожидалось. Однако программа просто завершает работу в ExecuteReader (), поэтому ArrayList никогда не заполняется.
Мне было интересно, выходила ли программа из-за того, что цикл while пропускался из-за пустого результата от читателя, но он даже не достиг оператора while. Я доказал это, вставив MessageBox и установив точку останова. Программа никогда не открывает окно сообщения, доказывающее, что оно выходит из класса в операторе ExecuteReader.
Что, черт возьми, я делаю не так!
Как всегда, спасибо за любую помощь.