【问题标题】:non-alphanumeric (ex semicolon) in connectionstring连接字符串中的非字母数字(前分号)
【发布时间】:2014-07-26 00:40:43
【问题描述】:

我已经在网上搜索了一个简单的解决方案来解决我的问题,但我觉得奇怪的是,没有人有办法“如果密码包含非字母数字字符,则获取正确的连接字符串”。

我的问题:
我有一个用户的密码包含以下一个或多个字符:

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

由于连接字符串的格式是“KEY=VALUE;KEY2=VALUE2”,如果密码当然包含分号,就会出现问题。

所以我做了一些研究,发现了这些“连接字符串规则”

  • 所有空白字符,除了放在值内或引号内的字符外,都将被忽略

  • 空白字符虽然会影响连接池机制,但池中的连接必须具有完全相同的连接字符串

  • 如果分号 (;) 是值的一部分,则必须用引号 (") 分隔

  • 如果值以双引号 (") 开头,则使用单引号 (')

  • 相反,如果值以单引号 (') 开头,则使用双引号 (")

  • 不支持转义序列

  • 值类型不相关

  • 名称是大小写 iNsEnSiTiVe

  • 如果 KEYWORD=VALUE 对在连接字符串中出现多次,则使用与最后一次出现关联的值

  • 但是,如果 provider 关键字在字符串中出现多次,则使用第一次出现。

  • 如果关键字包含等号 (=),则必须在其前面附加一个等号以表明它是关键字的一部分。

  • 如果一个值前面或后面有空格,它必须用单引号或双引号括起来,即 Keyword=" value ",否则空格被删除。

然后我阅读了一堆线程,其中人们试图将上述内容实现到他们的“格式化连接字符串方法”中,但是当他们开始时似乎更多的场景浮出水面。

那么我的问题是:

是否有人制作了“FormatConnectionstring”方法以在连接字符串中使用 - 还是我在这里做的完全错误,而我的问题确实存在于其他地方?

【问题讨论】:

  • 你试过正则表达式吗?
  • 我考虑过,是的,但没有想出解决方案,因为有很多不同类型的场景(我认为)
  • 你能想到什么不同的场景...... RegEx 适用于所有人
  • 我只是觉得奇怪的是没有人发布一种方法或其他东西来解决这个问题..所以要么我做错了什么,要么解决这个问题的代码太容易甚至打扰发帖:D
  • 这个帖子的最后两篇文章描述得很好:forums.asp.net/t/…

标签: c# vb.net connection-string non-alphanumeric


【解决方案1】:

使用SqlConnectionStringBuilder;要么:

  • 设置属性,读取ConnectionString(创建)
  • 设置ConnectionString,读取属性(解析)

【讨论】:

  • Dim conn As New SqlConnectionStringBuilder() conn.DataSource = "localhost" conn.UserID = "TestUser" conn.Password = "'hej;dav?,/test$" 原来是:数据Source=localhost;User ID=TestUser;Password="'hej;dav?,/test$" 似乎可以解决问题。如果密码以引号开头或包含分号,它将密码放在两个“”内- 否则它不会.. 但是您是否使用 SqlConnectionStringBuilder 来解决此类问题,或者您在编码时默认使用它?
  • @Thomas 通常连接字符串只是通过而不接触它们,所以这不是我每天都做的事情:但是当我 需要操作或检查 CS : 是的,我总是使用 CSBuilder
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 2015-06-15
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多