是否有可接受的方法来确定字符串是否为有效的连接字符串
本文关键字:字符串 是否 连接 有效 可接受 方法 | 更新日期: 2023-09-27 17:56:14
我有一个命令行应用程序,它将以以下两种方式之一进行配置:
- XML 文件 SQL Server 数据库
- (具体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 方法