2013-07-10 2 views
0

Я хочу заполнить ComboBox на форме. Я хранил процедуры, которые получают данные для моих ComboBoxes. Мой код ниже. Проблема в том, что мои сборники не заполняются. Когда я перехожу через код, он переходит к «reader = sc.ExecuteReader();» и не выполняет ни одну из последующих строк в Pop_ComboBox(). Хранимая процедура возвращает «ID» и «Описание» (только). Что я делаю не так?ComboBoxes, которые не заполняются из хранимой процедуры

private void frmInput_Load(object sender, EventArgs e) 
    { 
     //Connect to the db 
     this.sqlConn = new SqlConnection("Server=\"our_server";Database=\"Astra\";Trusted_Connection=yes;"); 

     //Populate the Equipment Type Listbox 
     Pop_ComboBox("exec uspASTRA_GetEquipTypeList;", cboEquipType); 


    } 

    private void Pop_ComboBox(string sQuery, ComboBox NameOfcbo) 
    { 
     SqlCommand sc = new SqlCommand(sQuery, this.sqlConn); 
     SqlDataReader reader; 

     reader = sc.ExecuteReader(); 
     DataTable dt = new DataTable(); 

     dt.Columns.Add("ID", typeof(int)); 
     dt.Columns.Add("Description", typeof(string)); 
     dt.Load(reader); 

     NameOfcbo.ValueMember = "ID"; 
     NameOfcbo.DisplayMember = "Description"; 
     NameOfcbo.DataSource = dt; 

    } 
+0

Вероятно, вы получаете исключение при вызове 'ExecuteReader'. Внутри Visual Studio перейдите в «Debug-> Exceptions», проверьте все и снова отлаживайте. Или поместите вызов в блок try-catch и посмотрите на исключение. –

+0

Вы не открыли свое соединение кстати ... !! this.sqlConn.Open(); –

+0

@ Ажар - Спасибо, что поймал это! И спасибо дарио за предложение. Теперь я вижу, что My SqlConn работает неправильно. – johncroc

ответ

0

Так что я хотел Суммируя все это в убедительный ответ на мой собственный вопрос. Однако мне нужно отдать должное, потому что я не мог ответить, если бы не какие-то великие мысли от других.

Прежде всего, мне нужен был блок Try-Catch вокруг моего кода. Если бы у меня было это, я бы получил информацию о том, что у меня нет хорошей связи с db. Спасибо, Дарио-Рамос!

Во-вторых, мне нужна хорошая строка соединения и явное подключение к db. Очевидно. Спасибо, Ажар Хорасаны!

Наконец, как это было предложено Eslam Гамаль, мне нужно, чтобы установить тип команды на «хранимая процедура» и выполнить следующим образом:

sc.CommandType = CommandType.StoredProcedure; 
SqlDataReader dr = sc.ExecuteReader(); 

Спасибо всем за ваши предложения. Я узнал некоторые ценные уроки, и мои комбо-боксы заполняются!

1

Используйте адаптер SqlDataAdapter и заполните свой datatable. например:

http://www.dotnetperls.com/sqldataadapter

Затем связать свой комбо коробки с DataTable источника данных.

+0

Мне любопытно: почему DataAdapter лучше, чем DataReader для набора данных только для чтения? Или вы делаете это предложение, потому что datareader нельзя использовать, поскольку я пытаюсь его использовать? – johncroc

+0

Теперь, когда у меня хорошая связь с db, мой оригинальный код (с использованием SqlDataReader) работает отлично. – johncroc

0

Явного установить тип команды для StoredProcedure

sc.CommandType = CommandType.StoredProcedure; 

и не использовать exec просто использовать имя StoredProc

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