public static void main(String[] args) {
double g = 1 / 3;
System.out.printf("%.2f", g);
}
Поскольку как 1, так и 3 являются ints, результат не округлен, но он усечен. Таким образом, вы игнорируете фракции и выполняете только целые.
Чтобы избежать этого, по крайней мере одно из ваших чисел 1 или 3 как десятичная форма 1.0 и / или 3.0.
OleDb более универсален. Если Вы когда-нибудь перемещаетесь в другой тип БД в будущем существует хороший шанс, это будет иметь драйвер Ole, и Вы не должны будете изменять столько же кода.
, С другой стороны, собственный драйвер SQL-сервера, как предполагается, быстрее, как Вы сказали, и он имеет более хорошую поддержку параметра (параметры могут использовать имена и сделать не , имеют , чтобы быть в порядке).
В моем личном опыте, я никогда не замечал различия в скорости; я также не мог найти, что что-либо создало резервную копию требования. Я подозреваю, что преимущество производительности реально, но что необходимо было бы обработать миллионы записей, прежде чем Вы могли начать измерять его.
то, Что я действительно замечал, имело значимое значение, были сообщения об ошибках. Я испытывал затруднения из-за старого приложения OleDb, и я переключил их на SqlClient из отчаяния. Конечно, это все еще не работало, но лучшие сообщения об ошибках предоставили достаточно новой информации, я смог решить проблему.
Я с Joel на этом, SqlClient является лучшим, чтобы использовать, если Вы - планирование того, чтобы придерживаться SQL Server. Существует увеличение производительности, но необходимо начать работать с большими наборами и высокими числами транзакций, чтобы обычно начать видеть преимущества этого.
В целом, ошибки и обеспеченная функциональность намного более адаптируется в соответствии с тем, что SQL Server может сделать, таким образом "лучшая" реализация, если Вы будете. Это также имеет поддержку МАРСА, который для некоторых делает его, "должен сделать" переключатель.
Вы могли всегда писать пример приложения с некоторым типичным операционным использованием SqlClient и OleDB и сравнивать их для сравнения производительности. Я сомневаюсь, что разница была бы значительной, но существует только один способ узнать.
я не думаю, что у Вас' есть любые проблемы с помощью OleDb, если Вы не используете экзотические типы данных как XML, в этом случае, Вы, возможно, должны были бы работать немного тяжелее.
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)».