Каковы за и против OleDB по сравнению с SQLClient?

public static void main(String[] args) {
    double g = 1 / 3;
    System.out.printf("%.2f", g);
}

Поскольку как 1, так и 3 являются ints, результат не округлен, но он усечен. Таким образом, вы игнорируете фракции и выполняете только целые.

Чтобы избежать этого, по крайней мере одно из ваших чисел 1 или 3 как десятичная форма 1.0 и / или 3.0.

15
задан Electrons_Ahoy 23 January 2009 в 18:18
поделиться

4 ответа

OleDb более универсален. Если Вы когда-нибудь перемещаетесь в другой тип БД в будущем существует хороший шанс, это будет иметь драйвер Ole, и Вы не должны будете изменять столько же кода.

, С другой стороны, собственный драйвер SQL-сервера, как предполагается, быстрее, как Вы сказали, и он имеет более хорошую поддержку параметра (параметры могут использовать имена и сделать не , имеют , чтобы быть в порядке).

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

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

20
ответ дан 1 December 2019 в 00:54
поделиться

Я с Joel на этом, SqlClient является лучшим, чтобы использовать, если Вы - планирование того, чтобы придерживаться SQL Server. Существует увеличение производительности, но необходимо начать работать с большими наборами и высокими числами транзакций, чтобы обычно начать видеть преимущества этого.

В целом, ошибки и обеспеченная функциональность намного более адаптируется в соответствии с тем, что SQL Server может сделать, таким образом "лучшая" реализация, если Вы будете. Это также имеет поддержку МАРСА, который для некоторых делает его, "должен сделать" переключатель.

3
ответ дан 1 December 2019 в 00:54
поделиться

Вы могли всегда писать пример приложения с некоторым типичным операционным использованием SqlClient и OleDB и сравнивать их для сравнения производительности. Я сомневаюсь, что разница была бы значительной, но существует только один способ узнать.

я не думаю, что у Вас' есть любые проблемы с помощью OleDb, если Вы не используете экзотические типы данных как XML, в этом случае, Вы, возможно, должны были бы работать немного тяжелее.

2
ответ дан 1 December 2019 в 00:54
поделиться

OLEDB намного быстрее, чем SQLClient, ЗА ИСКЛЮЧЕНИЕМ доступа через ADO.NET. Драйверы для OLEDB написаны на собственном неуправляемом коде, однако, когда вы обращаетесь к этим драйверам через ADO.NET, вы должны пройти несколько уровней (включая уровень абстракции и уровень взаимодействия COM). Уровень абстракции обеспечивает управление ресурсами, например управление дескрипторами памяти для обеспечения правильной сборки мусора, изменение типов данных и параметров на типы .NET и преобразование буфера oledb в привязки строк и столбцов. Уровень взаимодействия COM заботится о маршалинге, передаваемом сообщениями из .NET в COM и наоборот, включая блокировку / разблокировку / преобразование указателей.

Не слушайте никого, кто выдвигает ложные обвинения в отношении производительности OleDB, не понимая, как они ее тестировали и какую среду использовали (управляемый код или управляемый код). Единственное, что замедляет работу OleDB, - это объем внутренней обработки, необходимой для того, чтобы собственный код хорошо работал с управляемым кодом. Также имейте в виду, что библиотека SqlClient .NET имеет собственное оборудование и НЕ ЯВЛЯЕТСЯ НАТИВНОЙ библиотекой .NET, как думает большинство людей. Библиотеки SqlClient в .NET используют классы SNINativeMethodWrapper и SNIPacket, которые являются оболочками, маршалирующими данные между неуправляемым кодом (sqlncli.dll) и управляемым кодом .NET. Это недокументированная правда и причина того, почему .NET SqlClient никогда не сможет превзойти OleDB, если вы используете OleDB в собственном неуправляемом коде.

Таким образом, если вы используете полностью управляемый код, вы получите лучшую производительность от System.data.SqlClient.Если у вас смешанная среда, вы получите гораздо лучшую производительность, разговаривая напрямую с OleDB или с sqlncli.dll (SQL2005) или sqlncli10.dll (SQL 2008). Имейте в виду, что и OleDB, и ODBC обновляются Microsoft, и последние версии драйверов OleDB ДЕЙСТВИТЕЛЬНО взаимодействуют с новейшими неуправляемыми собственными клиентскими библиотеками SQL. Microsoft рекомендует использовать OleDB в неуправляемых приложениях, когда требуется высокая производительность.

Дополнительные сведения см. В разделе «Электронная документация по SQL Server 2008 \ Database Engine \ Разработка \ Руководство разработчика \ Программирование собственного клиента SQL Server 2008 \ Собственный клиент SQL Server 2008 (OLE DB)».

13
ответ дан 1 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: