2015-05-11 5 views
1

У меня есть форма настроек, на которой лежит выпадающая скобка, которую я хотел бы заполнить при загрузке формы данными, полученными из базы данных доступа.Код не последовательный порядковый номер в источнике

Где я испытываю трудности, на самом деле задает источник данных combobox - когда программа выполняется, она перескакивает с заполнения OleDbDataAdapter для загрузки формы; пропуская код.

Вот мой последний код:

Форма нагрузки

 private void frm_settings_Load(object sender, EventArgs e) 
    { 
     Divisions divs = new Divisions(); 
     DataSet ds = new DataSet(); 


     ds = divs.GetActiveDivisions(); //jumps from here to loading the form 
     this.cmbo_divisions.DataSource = ds; //this never gets invoked 
    } 

А класс Дивизион

class Divisions 
{ 
    private string error; 

    public string Error //read only 
    { 
     get { return this.error; } 
    } 

    public DataSet GetActiveDivisions() 
    { 
     OleDbConnection conn = new OleDbConnection(); 

     PinnacleConnection Pconn = new PinnacleConnection(); 
     string sql = "SELECT ID, title FROM Divisions WHERE active = true;"; 
     DataSet ds = new DataSet(); 
     //connect to db 
     conn = Pconn.createConnection(); 

     try 
     { 
      conn.Open(); 
     } 
     catch (Exception ex) 
     { 
      //error handling here 
      this.error = ex.Message; 
      return ds; 
     } 

     OleDbDataAdapter adapter = new OleDbDataAdapter(sql, conn); 
     adapter.Fill(ds); //!!jumps from here to loading the form!! 
     conn.Close(); //never gets invoked? 
     return ds; //never gets invoked? 
    } 
} 

Как вы можете видеть мои комментарии, выполнение скачет настройки источника данных на объект cmbo_divisions ... в результате получается пустое поле со списком.

Я в затруднении, любая помощь будет оценена по достоинству.

+0

Возможно, исключение. Во-первых, вы должны включить материал «halt on exception» в отладчике, что упростит поиск таких проблем. Кроме того, вам, вероятно, понадобится try-catch вокруг * all * кода базы данных (вам также могут потребоваться некоторые операторы 'using'. – crashmstr

+0

Я предполагаю, что вы ошибаетесь и возвращаете пустой' DataSet' из своего улова – Jonesopolis

+0

, когда я шаг за кодом, инструкция catch не выполняется, хотя ... – wribit

ответ

0

Вам не нужно использовать набор данных, DataTable больше Sutable для этого:

DataTable dt= new DataTable(); 
... 
adapter.Fill(dt); 

и связывание будет в DataTable непосредственно, так что вы можете избежать наборов данных, когда это возможно, поскольку они более тяжелые объектов:

this.cmbo_divisions.DataSource = dt; 
1

Мои лучшие догадки состоят в том, что adapter.Fill генерирует исключение или содержит насос сообщений. Поэтому сначала проверьте эти сценарии.

Смежные вопросы