2009-12-08 7 views
0

Я написал программу в VB.NET, и одна из вещей, которую делает эта программа, - это вставить записи в базу данных Microsoft Access. Бэкэнд моей программы, которая обращается к базе данных, записывается как сменный слой. Если я «обмениваю» этот слой слоем, который использовал базу данных Microsoft SQL Server, моя программа летит. Если я использую MS Access, его все еще довольно быстро, но он намного медленнее. У кого-нибудь есть подсказки или советы о том, как ускорить транзакции ADO.NET с помощью Microsoft Access? Я бы предпочел использовать MS Access через SQL Server, чтобы я мог распространять свою базу данных с моей программой (а не подключался к удаленному SQL Server). Какие-либо предложения? Кроме того, когда я создал базу данных MS Access, я создал ее в режиме совместимости с Access 2000. было бы быстрее использовать совместимый в 2003 режим?Доступ к базе данных ADO.NET

Заранее спасибо

+0

Рассматривали ли вы использование ADO/OLEDB через COM вместо ADO.NET? –

ответ

1

Access является, как вы испытываете, меньше оптимального.

Вы посмотрели SQL Server Compact Edition. Он может быть встроен и распространен с вашим приложением ... и должен работать намного лучше, чем Access.

+0

Да, единственное, о чем я слышал, это то, что он не поддерживает хранимые процедуры, и у меня их много, и было бы сложно переделать. – Icemanind

+0

Как Доступ менее оптимален? –

+0

Ну, поддерживает ли поддерживаемые хранимые процедуры? –

0

SQL Server Compact 3.5 предоставит вам одно и то же преимущество - единый файл базы данных, который можно развернуть и распространять (если вы включите сборки приложений в приложение). Он уменьшил возможности запросов по сравнению с полным экземпляром SQL Server, но он определенно быстрее, чем механизм доступа.

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

+0

Да, единственное, о чем я слышал, это то, что он не поддерживает хранимые процедуры, и у меня их много, и было бы сложно переделать. – Icemanind

+0

Да, это не так. Если у вас есть что-то, кроме простых объединений и запросов, я бы не рекомендовал его. – cdonner

+0

Есть ли у вас окончательное сравнение скорости между SQL Server Compact и доступным файлом базы данных Access/Jet? –

0

У вас также есть Access Access в Access одновременно? Если да, попробуйте свою программу, не открыв ее. Если это ускоряет работу, вы должны открыть либо соединение с базой данных, либо набор записей (против таблицы с несколькими записями) и оставить его открытым при обработке данных.

Проблема заключается в том, что если вы открываете и закрываете объекты или наборы записей в файле базы данных Access, а кто-то еще находится в файле базы данных Access, Jet тратит много времени на блокировки файла LDB. Поэтому сохранение постоянной связи с файлом базы данных Access решает эту проблему.

2

Хотя вам необходимо установить его, SQL Server Express поддерживает «развертывание файлов XCopy», где все, что вам нужно сделать для развертывания приложения, - это отправить файл .mdf и ваши исполняемые файлы.

Подробнее here на MSDN.

Это поддерживает хранимые процедуры: я использовал его в наших модульных тестах, чтобы динамически создавать отлаженную базу данных «на лету».

0

К моему опыту, ADO.NET не очень оптимизирован для MS Access. Использование старых интерфейсов ADO или DAO (доступных в VB.NET через COM) может привести к повышению производительности в 20 раз или более в некоторых случаях. Но все зависит от того, какие операторы SQL действительно делают ваша программа (много пакетных обновлений/вставки или много запросов с большими наборами результатов или множество интерактивных циклов LOAD-Transform-Store).

0

MSDN от особенности статью о том, как ускорить ADO.NET: http://msdn.microsoft.com/en-us/library/ms998569.aspx Несмотря на то, что статья немного пыльный, он все-таки делает несколько хороших точек :)

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

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