Havit.Data 2.1.0

Prefix Reserved
dotnet add package Havit.Data --version 2.1.0
                    
NuGet\Install-Package Havit.Data -Version 2.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Havit.Data" Version="2.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Havit.Data" Version="2.1.0" />
                    
Directory.Packages.props
<PackageReference Include="Havit.Data" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Havit.Data --version 2.1.0
                    
#r "nuget: Havit.Data, 2.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Havit.Data@2.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Havit.Data&version=2.1.0
                    
Install as a Cake Addin
#tool nuget:?package=Havit.Data&version=2.1.0
                    
Install as a Cake Tool

HAVIT .NET Framework Extensions - Data Class Library

Product Compatible and additional computed target framework versions.
.NET Framework net48 is compatible.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Havit.Data:

Package Downloads
Havit.Business

HAVIT .NET Framework Extensions - Business Class Library

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.1.0 134 10/21/2026
2.1.0-pre01 101 10/20/2026
2.0.33 136 9/19/2026
2.0.32 2,271 2/25/2025
2.0.31-pre02 200 1/30/2025
2.0.30 901 10/6/2022
2.0.5 1,085 12/15/2020
2.0.4 731 6/29/2020
2.0.3 657 6/11/2020
2.0.2 1,007 5/23/2019
2.0.1 830 3/21/2019

v2.1.0 (10/2026)
• Odstraněny členy označené [Obsolete]: DataRecord konstruktory (DataRow/IDataRecord s parametrem bool fullLoad nebo bez rozsahu načtení) a metody Load<T>, LoadObject, LoadString, LoadInt32, LoadDouble, LoadBoolean, LoadDateTime (použijte konstruktory s DataLoadPower a TryGet<T>()).
• BREAKING CHANGE: Přechod z System.Data.SqlClient na Microsoft.Data.SqlClient 7.1.1.
• DbConnector.ExecuteTransaction: oprava, požadovaný IsolationLevel se nepoužíval, transakce vždy běžela s výchozí izolací (chyba od roku 2012). Nyní se transakce zakládá s požadovanou izolací. Kód, který předával jinou izolaci než Unspecified (např. Serializable, Snapshot), ji nyní skutečně dostane (Snapshot vyžaduje povolenou snapshot izolaci v databázi).
• DbLockedCriticalSection: oprava souběhu při sdílení jedné instance více vlákny (např. singleton v DI). Výsledek sp_getapplock se dříve ukládal do instanční property, takže výsledek jednoho volání mohl přepsat výsledek jiného a kritická sekce mohla proběhnout bez zámku (nebo naopak selhat, i když zámek držela).
• DbLockedCriticalSection: zámek se explicitně uvolňuje i tehdy, když kritická sekce skončí výjimkou (původní výjimka není zakryta), a uvolnění v ExecuteActionAsync se již neruší zrušeným CancellationTokenem. Dříve zámek při výjimce držela session, jejíž spojení se vrátilo do connection poolu, až do resetu spojení, a ostatní instance aplikace čekaly na zámek.
• DbConnector.ExecuteNonQuery a ExecuteScalar: při výjimce se zavírá pouze spojení, které si DbConnector otevřel sám. Dříve se zavíralo i spojení otevřené volajícím, čímž se zahodila i jeho transakce (stejně jako to již dělal ExecuteReader správně).
• BREAKING CHANGE: DbConnector.ExecuteReader vrací při vypnutém trace (výchozí stav) přímo reader providera (např. SqlDataReader), ne obal TraceDbDataReader. Trace infrastruktura (DbConnectorTrace, DbCommandTraceData a jejich parametry) se při vypnutém trace již nealokuje pro žádný příkaz (ExecuteReader, ExecuteScalar, ExecuteNonQuery, ExecuteDataSet, ExecuteDataTable), což snižuje alokace zejména u dotazů s mnoha parametry. Při zapnutém trace se chování nemění.
• TraceDbDataReader.Close: lze volat opakovaně (Close + Dispose), dříve při druhém volání vyhodil InvalidOperationException (Read na zavřeném readeru).
• BREAKING CHANGE: Odstraněny hodnoty SqlServerCe35 a SqlServer2005 z enumu SqlServerPlatform, podpora SQL Server Compact Edition 3.5 a SQL Server 2005 skončila (zůstávají SqlServer2008 a SqlServer2012).
• DbConnector.ExecuteTransaction: při zadané vnější transakci a požadavku na jiný IsolationLevel (než Unspecified), než má vnější transakce, je nyní hned vyhozena InvalidOperationException s popisem příčiny (a transactionWork se nespustí). Dříve se zkoušelo založit druhou transakci na spojení s běžící transakcí, což SqlClient odmítl výjimkou o paralelních transakcích. Opravena i zavádějící dokumentace přetížení (vnořená transakce se nezakládá, nikdy se nevrací původní izolace).
• DbConnector.ExecuteTransaction: pokud selže založení transakce (např. nepodporovaný IsolationLevel nebo přerušené spojení), je spojení, které metoda otevřela, zavřeno. Dříve zůstalo otevřené a neuvolnilo se do connection poolu.
• DataRecord.Get a TryGet: převod na Nullable<T> z jiného typu (např. smallint na int?, decimal na double?, tedy i GetNullableInt32 nad sloupcem smallint) již nepadá na InvalidCastException. Hodnota, která není požadovaného typu ani IConvertible (např. Guid, byte[], DateTimeOffset požadovaný jako DateTime), nyní vyhodí dokumentovanou InvalidCastException místo tichého vrácení default(T).
• DbConnector.Default: při inicializaci z konfigurace se respektuje providerName connection-stringu DefaultConnectionString (dříve byl ignorován a vždy se použil SqlClient; prázdný providerName a "System.Data.SqlClient" i "Microsoft.Data.SqlClient" nadále znamenají Microsoft.Data.SqlClient, nezaregistrovaný providerName nyní vyhodí výjimku). První přístup k Default je thread-safe, souběžné přístupy již nemohou vytvořit více instancí.
• Opakování příkazů při přechodných chybách: příkaz spuštěný v transakci (DbCommand.Transaction není null) se již neopakuje a výjimka se předá volajícímu. Po chybě na serveru může být transakce zrušena a zopakování samotného příkazu by pokračovalo v nekonzistentním stavu, o opakování celé transakce rozhoduje volající. Zda příkaz běží v transakci, se zjišťuje před prvním pokusem, protože SqlClient po ukončení transakce (např. rollback na straně serveru) vrací z DbCommand.Transaction null. Čekání mezi pokusy používá Thread.Sleep místo Task.Delay().Wait() (synchronní API, bez alokace Task a timeru).
• DbConnector.ExecuteDataSet a ExecuteDataTable: při přechodné chybě se naplnění (Fill) opakuje stejně jako u ostatních Execute* metod (dříve se neopakovalo). Spojení si metody otevírají samy (a zavírají jen to, které otevřely), aby bylo opakování možné - adapter by si spojení po chybě sám zavřel.
• DbLockedCriticalSection: ExecuteAction a ExecuteActionAsync validují argumenty (lockValue nesmí být null ani prázdný a smí mít nejvýše 255 znaků, což je limit názvu zdroje sp_getapplock, který delší hodnotu tiše ořezával a různé zámky se mohly splést; criticalSection nesmí být null). Vyprší-li timeout SQL příkazu (SqlCommandTimeoutSeconds, výchozí 5 s) dříve než timeout zámku (LockTimeoutMs, výchozí bez omezení), je nyní vyhozena DbLockedCriticalSectionException (s SqlException jako InnerException) místo holé SqlException. Sjednoceny názvy parametrů volání sp_releaseapplock (s @).
• DataRecord: nový konstruktor DataRecord(DataRow, DataRecordSchema, DataLoadPower) umožňuje sdílet jedno schéma (new DataRecordSchema(DataTable)) všemi řádky jedné tabulky, stejně jako je to již možné u readeru. Konstruktor z DataRow nyní při null řádku vyhazuje ArgumentNullException.
• Dokumentace: DataRecordSchema popisuje omezení (schéma musí pocházet ze stejného zdroje jako DataRecordy, kontroluje se jen počet sloupců; názvy sloupců se porovnávají s rozlišením velikosti písmen; u duplicitních názvů platí poslední) a IntTable.GetSqlParameterValue upozorňuje, že vrácenou hodnotu nelze materializovat (všechny prvky jsou jedna instance SqlDataRecord). Chování se nemění, je pokryto testy.
• CustomCommandTimeoutWrappingDbProviderFactory: konstruktor kontroluje argumenty (null zapouzdřený factory vyhodí ArgumentNullException, záporný timeout ArgumentOutOfRangeException) hned při vytvoření, dříve až při prvním použití (NullReferenceException, resp. výjimka při nastavení CommandTimeout). Opravena dokumentace: CreateCommandBuilder je delegována, příkazy vytvořené CommandBuilderem nebo DbDataAdapterem timeout nedostanou.
• DbConnector: providerName "System.Data.SqlClient" i "Microsoft.Data.SqlClient" (a prázdný providerName) je mapován na Microsoft.Data.SqlClient.SqlClientFactory, registrace v konfiguraci není nutná.
• Microsoft.Data.SqlClient má výchozí Encrypt=True (System.Data.SqlClient měl False). Při nedůvěryhodném certifikátu SQL Serveru je nutné v connection stringu uvést TrustServerCertificate=True, případně Encrypt=False.
• IntTable: používá Microsoft.Data.SqlClient.Server.SqlDataRecord. Hodnoty jsou streamovány přes jediný znovupoužitý SqlDataRecord (výrazně méně alokací a rychlejší pro tisíce a více hodnot).
• DataRecord: hodnoty jsou uloženy v poli, názvy sloupců v DataRecordSchema. Nový konstruktor DataRecord(IDataRecord, DataRecordSchema, DataLoadPower) umožňuje sdílet jedno schéma všemi řádky readeru (pro 1000 řádků ~50 % méně alokací, ~28 % rychlejší načtení). Změnil se tvar binárně serializovaného DataRecordu (dříve serializovaná data nelze deserializovat).
• SqlDatabaseTransientErrorDetectionStrategy rozpoznává pouze Microsoft.Data.SqlClient.SqlException.
• Explicitní závislost System.Security.Cryptography.Pkcs 10.0.13 - Microsoft.Data.SqlClient zatahuje zranitelnou verzi (CVE-2026-84008, CVE-2026-70162).