2016-07-08 93 views
2

我將在以下兩種方式之一進行配置的命令行應用程序:是否有一個可接受的方法來確定一個字符串是否是一個有效的連接字符串?

  1. XML文件
  2. SQL Server數據庫(特別是Microsoft SQL Server中,沒有一個通用的 「SQL數據庫」)

要設置配置,將使用config命令行參數調用該配置。

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

所以,我會在應用程序中獲得一個字符串,我需要弄清楚它是哪一個。

是否有一種可接受的方式來確定給定的字符串是否是有效的SQL連接字符串?我喜歡把兩個選項中的任何一個作爲相同的參數,然後在內部找出它是(1)文件路徑還是(2)連接字符串。

有沒有辦法做到這一點,或者我應該試圖找到一個文件的路徑,並假設它是一個連接字符串,如果該文件沒有找到?或相反亦然?

+1

不可以。因爲每個DBMS都有自己的語法和自定義屬性。查看[https://www.connectionstrings.com/](https://www.connectionstrings.com/)並比較幾個 – lokusking

+1

最簡單的方法:嘗試使用「Path.GetFileName」對象獲取對象串;如果失敗了,它必須是連接字符串,所以用它來連接數據庫。如果這失敗了用戶搞砸了。你必須知道DBMS。 –

+0

對不起 - 我應該提到我們總是可以假設SQL Server。 – Deane

回答

0

文件名不能包含等號。連接字符串總是包含等號。 (如果您接受它,則成爲可接受的方法。)

區分是否真的需要知道它是「有效」還是隻需要決定是將其解釋爲連接字符串還是文件路徑。如果是後者,那麼你可以做出該決定而不驗證。然後,如果你已經決定它是一個連接字符串,但它不能打開,然後失敗。 (可能由於格式不正確或服務器不存在而可能無關緊要)。文件路徑也是如此。

怎麼樣一個非常「低技術」的方法 - 如果參數以.xml結尾,那麼它是一個XML文件。如果不是假設它是連接字符串。如果文件路徑包含空格,則可能需要考慮尾部引號。它可能就是這麼簡單。您無法解釋無效輸入。

0

通常,標準是假設它是一個文件,然後回落到原始值。重疊的可能性很低(除非你用;命名你的文件)並且文件存在的檢查是簡單而便宜的。

0

SqlConnectionStringBuilder類.NET

它有一個constructor接受連接字符串參數: 這將引發ArgumentException的,如果連接字符串是無效的:

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

對於您可以使用文件File.Exists方法

+2

這不會說連接字符串是否有效。 ConnectionString屬性僅解析conxString中提供的以分號分隔的列表。 https://msdn.microsoft.com/en-us/library/system.data.common.dbconnectionstringbuilder.connectionstring(v=vs.110).aspx。理論上SqlConnectionStringBuilder可以提供驗證,MSDN文檔指出它只是繼承基類實現。 –

+0

@EricJ。是正確的,它只是分成鍵值對。例如:嘗試'「ABC = 1; DEF = 2; DDD = 3;」'它不會拋出異常。 – user3185569

相關問題