W.DamengProvider 0.3.2

dotnet add package W.DamengProvider --version 0.3.2
                    
NuGet\Install-Package W.DamengProvider -Version 0.3.2
                    
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="W.DamengProvider" Version="0.3.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="W.DamengProvider" Version="0.3.2" />
                    
Directory.Packages.props
<PackageReference Include="W.DamengProvider" />
                    
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 W.DamengProvider --version 0.3.2
                    
#r "nuget: W.DamengProvider, 0.3.2"
                    
#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 W.DamengProvider@0.3.2
                    
#: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=W.DamengProvider&version=0.3.2
                    
Install as a Cake Addin
#tool nuget:?package=W.DamengProvider&version=0.3.2
                    
Install as a Cake Tool

W.DamengProvider

W.DamengProvider 是社区维护的达梦数据库 ADO.NET 驱动,支持异步操作、本地事务、存储过程、数组绑定、DbBatch、流式 BLOB/CLOB、TLS 和标准 .NET 诊断接口。

包名和程序集名为 W.DamengProvider,公开命名空间为 W.Dm。它不是官方 DM.DmProvider 的直接替换包;迁移时需要更新引用并重新编译,EF 适配层也需要相应调整。

安装

从 NuGet 安装。已发布版本见 NuGet 包页面。

dotnet add package W.DamengProvider
目标框架 说明
net9.0、net10.0 支持现代目标框架的全部功能,无额外运行时 NuGet 依赖。
net8.0 额外依赖 Microsoft.Bcl.Cryptography 10.0.12。
net6.0 额外依赖 Microsoft.Bcl.TimeProvider 8.0.1。由于 .NET 6 没有 DbDataSource,DmDataSource 不能通过该基类或 DbProviderFactory 多态使用。
netstandard2.1 供 .NET Core 3.1 应用和 Standard 2.1 类库使用;不支持 TLS、DbBatch、DateOnly/TimeOnly 映射,且只能显式选择 PlaintextAllowed 连接。

各目标的验证结果见 0.3.1 发布记录。运行时是否仍受微软支持,请单独查看 .NET 生命周期政策。

快速开始

连接串应由应用配置或 secret store 提供。现代目标框架默认要求 TLS 并验证证书;CA、客户端证书和私钥路径需要与服务器配置匹配。

using W.Dm;

var settings = new DmConnectionStringBuilder(
    Environment.GetEnvironmentVariable("DAMENG_CONNECTION_STRING")
    ?? throw new InvalidOperationException("Missing database configuration"))
{
    TransportSecurity = DmTransportSecurity.RequireTls
};

await using var source = DmDataSource.Create(settings.ConnectionString);
await using var connection = await source.OpenConnectionAsync();
await using var command = connection.CreateCommand();
command.CommandText = "SELECT 1 FROM DUAL";
var value = await command.ExecuteScalarAsync();

需要 DbProviderFactories 时,可在应用启动时注册:

DbProviderFactories.RegisterFactory("W.DamengProvider", DmClientFactory.Instance);

与官方驱动对比

如果你在使用官方驱动时遇到过存储过程参数静默错绑、函数返回值位置受限、过程时间参数被舍入或时区偏移无法保留,W.DamengProvider 重点解决的就是这些问题。

开发痛点 官方驱动实测行为 W.DamengProvider
存储过程参数名写错 未知名称会回退为按参数集合位置绑定,可能把值传给错误的参数 直接拒绝未知名称,不猜测调用者意图
函数返回值不放在参数集合首位 ReturnValue 位于不同位置时可能得到不同、甚至错误的结果 支持放在集合中的不同位置,返回结果一致
存储过程需要七位小数秒 时间输入会由七位降为六位,例如 .1234567 被舍入为 .123457000 已验证的服务器环境下保留 CLR 的 100ns 精度,不做隐式舍入
读取带时区的时间列 GetValue 返回 DateTime,无法通过返回值保留原始偏移 返回 DateTimeOffset,明确保留时区偏移

此外,本驱动还提供贯通网络 I/O 的异步 API、减少逐行往返的数组绑定、标准 DbBatch API、流式 BLOB/CLOB、默认严格 TLS,以及 ActivitySource 和 Meter 诊断接口。

从官方驱动迁移时间参数时,小数秒位数应使用 Scale,例如将 Precision=7 改为 Scale=7。

以上官方行为来自 DM.DmProvider 8.3.1.47463 实测;过程相关测试使用 DM 8.1.5.60,不代表所有官方版本。详见过程对比记录和时间精度说明。

支持范围与限制

  • 异步与取消:支持同步和异步 Open、Prepare、Execute、Read、NextResult。请求发送后发生取消或超时时,物理连接可能关闭;无法确认结果的提交会报告 OutcomeUnknown,驱动不会自动重试。
  • 事务:默认隔离级别为 ReadCommitted。保存点和其他隔离级别取决于服务器能力,详见事务说明。
  • 连接管理:DmDataSource 会限制并发连接数,但目前每次租用都会新建物理会话,归还时销毁,因此没有物理连接复用的性能收益。
  • BLOB/CLOB:支持流式读写。完整物化读取的返回载荷上限为 64 MiB;流式输入需要显式声明 BLOB/CLOB 类型,输入流由调用者管理。
  • 时间精度:CLR 时间值保持 100ns tick 精度;无法被服务器或目标列精确表示的值会被拒绝。七位小数写入只在已验证的服务器环境下开放。
  • 已验证环境:DM 8.1.5.60 / UTF-8,以及 DM 8.1.4.6 / GB18030 / TLS。其他服务器版本需要单独验证。
  • 不支持:原生加密、批量装载、自动重连、分布式事务和部分旧版功能。
  • 诊断名称:ActivitySource 和 Meter 均使用 W.DmProvider,便于沿用现有监控配置。

完整支持边界见实现与兼容性文档。本项目不附带达梦服务端或第三方原生库。

文档与开发

开发构建使用 global.json 固定的 .NET SDK 10.0.401,与应用选择的目标运行时分开管理。

许可

Apache-2.0。包含上游 DM 的 C# 代码贡献和本项目修改,详见 THIRD-PARTY-NOTICES.md 与 LICENSE。

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos 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 W.DamengProvider:

Package Downloads
W.EntityFrameworkCore.Dameng.WDriver

Runs the W.EntityFrameworkCore.Dameng provider on the W.DamengProvider ADO.NET driver (asynchronous network I/O, cancellation, failure outcomes, 100ns temporal precision). Select it with UseDamengWithWDriver.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.3.2 97 11/9/2026
0.3.1 168 10/28/2026
0.3.0 118 10/17/2026
0.2.0 147 10/15/2026
0.1.0-preview.1 71 10/13/2026