Из следующей документации по методу OleDbDataAdapter.Fill (DataTable, Object) :
ВНИМАНИЕ [1149 ]
blockquote>
При использовании объектов ADO Recordset или Record в сочетании с приложениями .NET Framework всегда вызывайте Close, когда вы закончите. Это гарантирует своевременное освобождение базового соединения с источником данных, а также предотвращает возможные нарушения доступа из-за того, что неуправляемые объекты ADO возвращаются сборщиком мусора, когда существующие ссылки еще существуют.Также имеется в виду Заполнение DataSet набором записей ADO или Record - документация :
Обратите внимание, что перегрузка OleDbDataAdapter.Fill, которая принимает DataSet и Объект ADO неявно вызывает Close объекта ADO, когда операция Fill завершена. Вам необходимо явно закрыть объект ADO Recordset или Record после вызова перегрузки OleDbDataAdapter.Fill, которая принимает DataTable.
blockquote>Это означает, что при вызове метода Fill через RecordSet вы должны закрыть его перед повторным использованием, иначе строки не будут возвращены.
Возможные обходные пути
Я действительно не знаю, как закрыть набор записей из переменной Object, но я попытаюсь предоставить некоторые возможные обходные пути:
(1) Сохранение в DataTable
В приведенной ниже ссылке они упомянули следующий обходной путь:
Как только мой Recordset
@[User::FilePath]
будет заполнен, я использую задачу сценария и Заполните его в DataSet ds, используя OledbDataAdapter и DataTable.Затем, в той же задаче сценария, я поместил значение ds в новую переменную типа объекта
@[User::FilePathDataTable]
.При этом тип данных
FilePathDataTable
становитсяSystem.Data.DataTable
.Этот набор данных можно легко использовать любое количество раз внутри цикла For-Each.
Я не использую метод
blockquote>DataAdapter.Fill()
внутри цикла ForEach для ssis. Я просто присваиваю значение@[User::FilePathDataTable]
новому набору данных и использую его для итераций.Ссылка
- Чтение набора записей несколько раз дает 0 строк
- Как повторно использовать Объект набора записей в службах SSIS
(2) Использование источника набора записей
Вместо использования компонента Script для генерации строк из переменной Object попробуйте сделать это с помощью RecordSet Source.
(3) Приведение переменной в качестве набора записей
Я не проверял этот подход, и я не уверен, будет ли он работать с объектной переменной
Требуется ссылка на объекты данных Microsoft ActiveX.
List
PublicHolidays = new List (); var rs = ((ADODB.Recordset)Variables.LISTPublicHolidays); OleDbDataAdapter A = new OleDbDataAdapter(); DataTable dt = new DataTable(); A.Fill(dt, rs); foreach (DataRow row in dt.Rows) { object[] array = row.ItemArray; var Public = new PublicHoliday() { DateKey = int.Parse(array[0].ToString()), FullDateAlternateKey = DateTime.Parse(array[1].ToString()) }; PublicHolidays.Add(Public); } rs.Close(); Обновление 1
на основе приведенных ниже комментариев попробуйте удалить метод
rs.Close();
из первого и второго сценария перед выполнением метода Fill используйте методrs.MoverFirst()
, чтобы иметь возможность извлекать информацию из набора записей. s>Третий подход удален по следующей ссылке:
Вот что-то, обертка Python вокруг интерпретатора SeaMonkey Javascript... http://pypi.python.org/pypi/python-spidermonkey
Вы могли бы также хотеть проверить проект PyPy - у них есть Python к (чему-либо) компилятор, включая Python к JavaScript, C, и llvm. Это позволяет Вам писать свой код в Python и затем компилировать его в JavaScript, как Вы требуете.
Кроме того, проверьте информативный блог:
К сожалению, хотя, Вы не можете преобразовать JavaScript в Python этот путь. Это, кажется, работает действительно хорошо в целом, они раньше имели JavaScript (сделанный из скомпилированного Python) версия игры Bub'n'Bros онлайн (хотя сервер снизился некоторое время).
Существует мост на основе JavaScriptCore (из WebKit), но это довольно неполно: http://code.google.com/p/pyjscore/
Если Ваш просто интересующийся совместным использованием сложных типов данных между JavaScript и Python, проверьте jsonpickle. Это переносит стандартные библиотеки Python JSON, но имеет некоторый ум в сериализации и десериализации классов Python и других типов данных.
Довольно много проектов Google App Engine пользовались этой библиотекой. Joose и FirePython оба включают jsonpickle.
Как насчет pyjs?
С вышеупомянутого веб-сайта:
pyjs является Платформа разработки Богатого интернет-приложения (RIA) и для сети и для Рабочего стола. С pyjs можно записать приводимые в действие JavaScript веб-приложения полностью в Python.
есть два проекта, которые позволяют «очевидный» переход между объектами python и объектами javascript, с «очевидными» переводами из int или float to Number и str или unicode to String: PyV8 и, как уже упоминал один автор: python-spidermonkey .
на самом деле существует две реализации pyv8 - Первоначальный эксперимент был выполнен Себастьеном Луизелем, а второй (в активной разработке) - Флайером Лю.
Мой интерес к этим проектам заключался в том, чтобы связать их с пижамой , компилятором python-to-javascript , чтобы создать ускоритель Python JIT.
так что есть много всего - это просто зависит от того, что вы хотите сделать.