C#中相似SQL Server连接字符串出现不同行为的原因问询
分析你的DataHelper构造函数疑问
我猜你是在构造数据库连接字符串的过程中遇到了让你摸不着头脑的问题?先先看你这段能正常跑的代码:
public DataHelper() { this.dataSource = "MyMachine"; this.initCatalog = "myDB"; this.uid = "sa"; this.pass = "thep@ssw0rd"; this.conStr = "Data Source=" + dataSource + ";Initial Catalog=" + initCatalog + ";User ID=" + uid + ";Password=" + pass; this.conn = new SqlConnection(conStr); // 补全你没写完的部分 }
你说已经找到更简单的实现方式,我猜大概率是用SqlConnectionStringBuilder吧?比如这种写法:
public DataHelper() { var connStringBuilder = new SqlConnectionStringBuilder(); connStringBuilder.DataSource = "MyMachine"; connStringBuilder.InitialCatalog = "myDB"; connStringBuilder.UserID = "sa"; connStringBuilder.Password = "thep@ssw0rd"; this.conStr = connStringBuilder.ToString(); this.conn = new SqlConnection(conStr); }
至于你费解的问题,我推测大概率和手动拼接字符串的潜在隐患有关:
- 要是你的密码里包含
;、=这类特殊字符,直接拼接会直接破坏连接字符串的格式,导致数据库连接失败——只不过你的密码thep@ssw0rd刚好没这类字符,所以代码能正常运行。 - 手动拼接很容易出现拼写错误,比如把
Initial Catalog写成InitialCatlog,编译器不会报错,但运行时就会连接失败;而用SqlConnectionStringBuilder的话,属性是强类型的,能直接避免这类低级错误。 - 另外提一句,直接在代码里硬编码sa密码这类敏感信息是非常不安全的,生产环境里建议把这些配置放到appsettings.json或者web.config这类配置文件里,通过配置读取的方式获取,这是行业通用的最佳实践。
如果你的费解点不是这个,比如是连接对象初始化时机或者其他问题,可以补充更多细节,但从现有代码来看,这应该是最贴合你疑问的分析方向了。
内容的提问来源于stack exchange,提问作者Ravi Gaurav Pandey
相关产品推荐
相关产品推荐

