• Connection strings in ADO.NET


    背景

    说PowerShell需要读取项目的system.propertites文件,从中取出jdbc的连接字符串,然后拼接ado.net使用的连接字符串,然后连接数据库查询特定表,得到某个业务数据。

    实现

    jdbc的连接字符串如下

    jdbc.url=jdbc:sqlserverL//localhost:1433;databaseName=YOURDB
    jdbc.username=USERNAME
    jdbc.password=PASSWORD
    

    用PowerShell这么读取所在行

    Select-String -Path $FilePath -Pattern "jdbc.url=" #返回对象,OBJ.Line才是字符串
    Select-String -Path $FilePath -Pattern "jdbc.username="
    Select-String -Path $FilePath -Pattern "jdbc.password="
    

    然后通过Replace可以得到ServerName, DBName, UserName, Password
    最后拼接ADO.NET需要的连接字符串

    [string]::Format("server={0};database={1};uid={2};pwd={3}",ServerName, DBName, UserName, Password);
    

    问题及解决

    客户的密码中包含分号,于是这个连接串就有问题了。
    因为连接字符串本身就是一个分号分割的kv组。

    A connection string is a semicolon-delimited list of key/value parameter pairs:

    解决方案官方说了,用单引号或者双引号包起来

    it must be enclosed in single or double quotation marks.

    我们改为用单引号包起来

    [string]::Format("server={0};database={1};uid={2};pwd='{3}'",ServerName, DBName, UserName, Password);
    

    问题解决了
    我们马上想到,那么密码中有单引号怎么办?
    官方也说了

    You can also escape the enclosing character by using two of them together

    所以我们修改为

    [string]::Format("server={0};database={1};uid={2};pwd='{3}'",ServerName, DBName, UserName, Password.Replace("'","''"));
    

    参考

    https://docs.microsoft.com/en-us/sql/connect/ado-net/connection-strings?view=sql-server-ver15#connection-string-syntax

  • 相关阅读:
    解决360浏览器兼容模式的页面显示问题
    .NET知识点汇总
    C# 6.0新加特性
    C# 5.0新加特性
    C# 4.0新加特性
    C# 3.0新加特性
    C# 2.0新加特性
    C#中null、""、string.empty区别
    C#使用SQLite
    页面 关于处理如何点击按钮实现定位到某一位置操作
  • 原文地址:https://www.cnblogs.com/talentzemin/p/15957342.html
Copyright © 2020-2023  润新知