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

如何在使用SqlConnectionStringBuilder前验证字符串是否为有效SQL连接串?

针对SQL连接字符串解析与验证的解决方案

1. 跨数据库保存的连接字符串对比优化

你当前通过SqlConnectionStringBuilder提取DataSource和InitialCatalog做跨库判断的思路可行,推荐补充空值处理并统一大小写,避免因实例名大小写差异导致误判:

Dim currentDB As New System.Data.SqlClient.SqlConnectionStringBuilder(DbF.ConStr)
Dim fileDB As New System.Data.SqlClient.SqlConnectionStringBuilder(P.ConStr)

' 统一转小写消除大小写影响,同时处理空值
Dim currentDataSource = currentDB.DataSource?.ToLowerInvariant()
Dim currentCatalog = currentDB.InitialCatalog?.ToLowerInvariant()
Dim fileDataSource = fileDB.DataSource?.ToLowerInvariant()
Dim fileCatalog = fileDB.InitialCatalog?.ToLowerInvariant()

If currentDataSource <> fileDataSource OrElse currentCatalog <> fileCatalog Then
    ' 执行跨数据库保存的专属逻辑
End If

2. 区分Excel路径与数据库连接字符串

最可靠的方式是在加载模型时标记来源类型:

  • 加载阶段:定义枚举(如SourceType.Database/SourceType.Excel),加载Excel时给OM标记SourceType.Excel并保存文件路径;加载数据库时标记SourceType.Database并保存连接字符串。
  • 保存阶段:先判断SourceType,如果是Excel类型,直接跳过数据库连接字符串的对比逻辑。

如果无法提前标记,也可以通过字符串特征快速区分:

  • 数据库连接字符串通常包含Data Source、Initial Catalog、Server这类核心关键词;
  • Excel路径一般带.xls/.xlsx后缀,或是本地路径(如C:\)、网络共享路径(如\\server\file)格式。

3. 非异常捕获方式验证SQL Server连接字符串

官方没有提供直接的验证API,但可以通过组合规则判断:

  • 必须包含Data Source(或Server)和Initial Catalog(或Database)这两组核心键中的至少一组对应项;
  • 不包含Excel连接特有的关键词(如Excel 12.0、HDR=Yes);
  • 符合键值对用;分隔、键值用=连接的基本格式。

以下是实现示例:

Function IsSqlServerConnectionString(conStr As String) As Boolean
    If String.IsNullOrWhiteSpace(conStr) Then Return False
    
    ' 拆分并提取所有键名(转小写)
    Dim keyNames = conStr.Split(";"c)
                         .Where(Function(s) s.Contains("="))
                         .Select(Function(s) s.Split("="c)(0).Trim().ToLowerInvariant())
    
    ' 检查核心数据库关键词
    Dim hasDataSource = keyNames.Contains("data source") OrElse keyNames.Contains("server")
    Dim hasCatalog = keyNames.Contains("initial catalog") OrElse keyNames.Contains("database")
    
    ' 排除Excel相关连接字符串
    Dim isExcelCon = conStr.IndexOf("excel", StringComparison.OrdinalIgnoreCase) >= 0 _
                     OrElse conStr.IndexOf("hdr=", StringComparison.OrdinalIgnoreCase) >= 0
    
    Return hasDataSource AndAlso hasCatalog AndAlso Not isExcelCon
End Function

这个方法能覆盖绝大多数场景,避免了异常处理的性能开销。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:31:15