![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
troika |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 12.4.2009 Репутация: нет Всего: нет |
В общем есть один DataGridView, который содержит столбец с кодом исполнителя. Есть таблица, в котрой этот код исполнителя явлется ключевым полем, и в которой хранится ФИО этого самого исполнителя. Нужно чтобы в одном из столбцов DataGridView отображалось ФИО исполнителя в зависимости от кода исполнителя в этой строке. Сделал я это так: (Имя моего DataGridView - mainGrid.)
private void PodstanovkaFIOIsp() { int number = mainGrid.RowCount; OleDbCommand Fetch_FIO = new OleDbCommand(); Fetch_FIO.Connection = Connection; Fetch_FIO.CommandText = "SELECT FIO From Sotrudniki Where ID_sotrudnika = ?"; for (int i = 0; i < number; i++) { Connection.Open(); Fetch_FIO.Parameters.Add("ID", OleDbType.Integer, 10, "ID_sotrudnika").Value = mainGrid.Rows[i].Cells[Codispolnitel.Index].Value; OleDbDataReader reader = Fetch_FIO.ExecuteReader(); while (reader.Read()) { mainGrid.Rows[i].Cells[FIOIsp.Index].Value = reader[0].ToString(); } Connection.Close(); } } В результате дает исключение "COM object that has been separated from its underlying RCW cannot be used." в строке OleDbDataReader reader = Fetch_FIO.ExecuteReader(); Причем выдает его при втором заходе в цикл. При первом заходе в цикл все ОК. Помогите пожалуйста как сделать правильно. P.S. Строка соединения Connection уже есть, с этим все нормально |
|||
|
||||
KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 5 Всего: 38 |
1) в каждой новой итерации ты заново открываешь и закрываешь подключение - вынеси строку Connection.Open(); до цикла, а
Connection.Close(); после цикла 2) в каждой новой итерации ты добавляешь новые параметры к команде, но не очищаешь старые - перед строкой: Fetch_FIO.Parameters.Add("ID", OleDbType.Integer, 10, "ID_sotrudnika").Value = mainGrid.Rows[i].Cells[Codispolnitel.Index].Value; добавь строку: Fetch_FIO.Parameters.Clear(); 3) Из того, что ты написал, я понял, что ключи - уникальны => проще использовать не ExecuteReader а ExecuteScalar Получится что то вроде этого:
-------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
troika |
|
||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 12.4.2009 Репутация: нет Всего: нет |
Интересно получается. Выходит во всем виноват .ExecuteReader(); Если делать по 1 пункту, то выдает исключение "There is already an open DataReader associated with this Command which must be closed first." Если при этом еще учесть 2 пункт и добавить еще Fetch_FIO.Parameters.Clear() то это тоже ничего не меняет. А вот с .ExecuteScalar(); все просто замечательно в любых комбинациях. Подключение можно открывать и закрывать хоть при каждой итерации, хоть для всего цикла (что более разумно), хоть с Fetch_FIO.Parameters.Clear(), хоть без него все работает отлично. Спасибо большое за помощь! P.S. Правда есть еще один вопрос про VS 2005 + Access, но для него я решил что сейчас создам отдельную тему |
||||
|
|||||
KelTron |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 5 Всего: 38 |
Это я не углядел, всё правильно, датаридер также нужно закрывать после использования тогда всё будет норм.
Your welcome! ..) -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |