You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

System.ArgumentException报错,求将eixample从ProgressSql切换至SQLSERVER方案

解决从ProgressSQL迁移到SQL Server时的Keyword not supported: data source错误及完整迁移指南

首先明确回答:从ProgressSQL切换到SQL Server完全可行,.NET生态对SQL Server的支持非常成熟,只要调整几个核心配置并适配少量细节即可完成迁移。下面一步步帮你解决问题:

错误原因分析

你遇到的System.ArgumentException: 'Keyword not supported: data source Parameter name: keyword',本质是因为应用当前使用的是ProgressSQL的数据驱动/连接字符串格式,而SQL Server的连接协议和关键字规则和Progress不一样——要么是你用了Progress的驱动去连接SQL Server,要么是连接字符串里混杂了Progress特有的关键字,导致驱动无法识别。

具体迁移步骤

1. 更换SQL Server数据驱动

首先移除项目中ProgressSQL相关的NuGet包(比如Progress.Data.Client之类的),添加SQL Server官方驱动:

  • 推荐使用Microsoft.Data.SqlClient(.NET Core/.NET 5+首选)
  • 如果是传统.NET Framework,也可以用System.Data.SqlClient

2. 修改连接字符串

ProgressSQL的连接字符串通常是类似这样的Progress专属格式:

Host=my-progress-server;Database=my-db;User ID=my-user;Password=my-pass;

替换为SQL Server兼容的连接字符串格式,两种常见场景:

  • SQL Server身份验证:
    Data Source=my-sql-server;Initial Catalog=my-db;User ID=my-user;Password=my-pass;TrustServerCertificate=True;
    
  • Windows集成身份验证:
    Data Source=my-sql-server;Initial Catalog=my-db;Integrated Security=True;TrustServerCertificate=True;
    

提示:TrustServerCertificate=True是用于开发/测试环境跳过证书验证,生产环境建议配置合法证书后移除该参数。

3. 替换数据提供工厂(如果用了DbProviderFactory)

如果你的代码中使用了通用的DbProviderFactory来创建连接,需要把Progress的工厂替换为SQL Server的:

原来的ProgressSQL代码:

using System.Data.Common;
using Progress.Data;

var providerFactory = DbProviderFactories.GetFactory("Progress.Data.ProgressDbProviderFactory");
using var connection = providerFactory.CreateConnection();
connection.ConnectionString = "Host=my-progress-server;Database=my-db;User ID=my-user;Password=my-pass;";
connection.Open();

修改为SQL Server的代码:

using System.Data.Common;
using Microsoft.Data.SqlClient;

// 方式1:通过DbProviderFactories获取
var providerFactory = DbProviderFactories.GetFactory("Microsoft.Data.SqlClient");
// 方式2:直接实例化(更简单)
// var providerFactory = SqlClientFactory.Instance;

using var connection = providerFactory.CreateConnection();
connection.ConnectionString = "Data Source=my-sql-server;Initial Catalog=my-db;User ID=my-user;Password=my-pass;TrustServerCertificate=True;";
connection.Open();

4. 适配SQL语法差异(必要时)

虽然大部分标准SQL是通用的,但ProgressSQL和SQL Server有一些语法细节差异,需要检查并替换:

  • 字符串连接:Progress用||或+,SQL Server推荐用CONCAT()函数(避免NULL导致结果为NULL)
  • 日期函数:Progress的CURRENT_DATE → SQL Server的GETDATE()/SYSDATETIME()
  • 分页:Progress的SKIP 10 FIRST 20 → SQL Server的OFFSET 10 ROWS FETCH NEXT 20 ROWS ONLY
  • 特殊函数:比如Progress的SUBSTRING参数顺序可能和SQL Server不同,需要核对

5. ORM框架调整(如果用了EF等)

如果项目用Entity Framework,需要修改DbContext的配置:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    // 替换原来的ProgressSQL配置,改用UseSqlServer
    optionsBuilder.UseSqlServer("Data Source=my-sql-server;Initial Catalog=my-db;User ID=my-user;Password=my-pass;TrustServerCertificate=True;");
}

总结

只要完成以上几步,就能顺利从ProgressSQL迁移到SQL Server。核心是替换数据驱动、修正连接字符串,然后适配少量SQL语法差异——整个过程是完全可行的,没有技术上的障碍。

内容的提问来源于stack exchange,提问作者MrD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 00:47:34