是否有可接受的方法来确定字符串是否为有效的连接字符串

本文关键字:字符串 是否 连接 有效 可接受 方法 | 更新日期: 2023-09-27 17:56:14

我有一个命令行应用程序,它将以以下两种方式之一进行配置:

  1. XML 文件
  2. SQL Server 数据库
  3. (具体Microsoft SQL Server,而不是通用的"SQL 数据库")

要设置配置,将使用config命令行参数调用它。

myapp.exe -config [some file path]
myapp.exe -config [some connection string]

因此,我将在应用程序内获得一个字符串,我需要弄清楚它是哪一个。

是否有可接受的方法来确定给定字符串是否为有效的 SQL 连接字符串? 我很想将这两个选项中的任何一个作为相同的参数,然后在内部确定它是 (1) 文件路径还是 (2) 连接字符串。

有没有办法做到这一点,或者我应该尝试在路径上找到一个文件,如果找不到该文件,则假设它是一个连接字符串? 反之亦然?

是否有可接受的方法来确定字符串是否为有效的连接字符串

文件名不能包含等号。连接字符串始终包含等号。(如果您接受它,它将成为可接受的方法。

重要的是要区分是否确实需要知道它是否"有效",或者是否只需要决定是将其解释为连接字符串还是文件路径。如果是后者,那么您可以在不验证的情况下做出决定。然后,如果您已确定它是一个连接字符串,但无法打开它,则它将失败。(它是否因为格式不正确或服务器不存在而失败可能无关紧要。文件路径也是如此。

一个非常"低技术"的方法呢 - 如果参数以.xml结尾,那么它是一个XML文件。如果不是,则假定它是一个连接字符串。您可能需要考虑尾随引号,以防文件路径包含空格。可能就是这么简单。对于无效输入,您无能为力。

通常,标准是假设它是一个文件,然后回退到原始值。重叠的可能性很低(除非您使用 ; 命名文件),并且检查文件是否存在既简单又便宜。

.NET 中有 SqlConnectionStringBuilder 类

它有一个接受连接字符串作为参数的构造函数:如果连接字符串无效,它将抛出 ArgumentException:

    try
    {
        var connectionSb = new SqlConnectionStringBuilder("your CS");
    }
    catch(ArgumentException e)
    {
        //Connection string is not valid
    }

对于文件,您可以使用 File.Exists 方法