2014-06-05 43 views
0

我在網上搜索了一個簡單的解決方案,但我覺得很奇怪,沒有人有辦法「獲取正確的連接字符串,如果密碼包含非字母數字字符「。非字母數字(ex分號)在連接字符串

我的問題:
我有具有包含這些字符中的一個或多個密碼的用戶:

` ~ ! @ # $ %^& * () _ + - = { } | \ : " ; ' < > ? , ./

由於ConnectionString的格式是 「KEY = VALUE; KEY2 = VALUE2」 它如果密碼包含分號,當然是一個問題。

所以我做了一些研究,發現這些「ConnectionString的規則」

  • 所有空白字符,除了那些在值或引號內,被忽略

  • 空白字符會盡管影響連接池機制,但池連接必須具有完全相同的連接字符串

  • 如果分號(;)是值的一部分,則必須用引號(「)分隔

  • 使用單引號(「),如果該值用雙引號(‘)開始

  • 相反,使用雙引號(’)如果值開始以一個單引號(」)

  • 沒有轉義序列支持

  • 值類型是不相關的

  • 名不區分大小寫

  • 如果發生KEYWORD = VALUE對比連接字符串中出現多次,以最後一次出現相關聯的值被用於

  • 然而,如果提供的關鍵字發生在字符串中多次,第一次出現是用來。

  • 如果關鍵字包含等號(=),則必須在其後面加上一個等號,以表明它是關鍵字的一部分。

  • 如果某個值具有前後空格,則必須用單引號或雙引號括起來,即Keyword =「value」,否則空格將被刪除。

然後我讀了一堆線程,人們試圖實現上述東西變成自己的「格式ConnectionString的方法」,但它似乎更場景曝光時,他們就開始了。

我的問題則是:

有沒有人在那裏誰提出了「FormatConnectionstring」方法在ConnectionString中使用 - 還是我做一些完全錯誤的在這裏和我的問題真的存在別的地方?

+0

你試過正則表達式? –

+0

我想過是的,但還沒有拿出解決方案,因爲有很多不同類型的場景(我認爲) – Thomas

+0

你可以想到什麼不同的場景... RegEx適用於所有 –

回答

1

使用SqlConnectionStringBuilder;或者:

  • 的屬性集,讀ConnectionString(創建)
  • 設置ConnectionString,讀取性能(解析)
+0

暗淡康恩作爲新SqlConnectionStringBuilder() conn.DataSource = 「localhost」 的 conn.UserID = 「TestUser用戶」 conn.Password = 「'HEJ; DAV,/測試$?」 可謂是: 數據Source = localhost; User ID = TestUser; Password =「'hej; dav?,/ test $」 它似乎有訣竅..如果密碼以引號開頭或包含分號,則會將密碼置於兩位「」 - 否則它不.. 但你有沒有使用SqlConnectionStringBuilder來解決這種類型的問題,或者你在編碼時默認使用它? – Thomas

+0

@Thomas通常連接字符串只是通過而不接觸它們,所以它不是我每天都在做的事情:但是當我*做*需要操縱或檢查CS時:是的,我總是使用CSBuilder –

相關問題