DbConnectionStringBuilder和OdbcConnectionStringBuilder连接字符串之间的区别

时间:2018-08-05 23:29:26

标签: c# visual-studio-2017 database-connection dbconnection

我正在尝试使我的应用程序数据库不可知,因此我选择使用DBConnection类,而不是使用目前正在我的应用程序中乱扔的SqlConnection,OracleConnection等。因此,DBConnectionStringBulder在连接字符串中添加双引号时遇到问题。当我使用OdbcConnectionStringBuilder时,多余的双引号被忽略了。因此,现在我需要在建立连接字符串后替换双引号,以避免出现任何问题。

OdbcConnectionStringBulder连接字符串:

  

Driver = {Microsoft文本驱动程序(* .txt;   * .csv)}; Dbq = C:\ Temp \; Extensions = asc,csv,tab,txt; Persist Security Info = False

DbConnectionStringBulder连接字符串:

  

Driver = {Microsoft文本驱动程序(* .txt;   * .csv)} ; Dbq = C:\ Temp \; Extensions = asc,csv,tab,txt; Persist Security Info = False

所以我猜测这是DbConnectionStringBuilder中的错误,但我想查看我是否做错了什么。这是适用的代码以及我的解决方法:

        OdbcConnectionStringBuilder odbcConnectionString = new OdbcConnectionStringBuilder();
        odbcConnectionString.Add("Driver", "{Microsoft Text Driver (*.txt; *.csv)}");
        odbcConnectionString.Add("Dbq", @"C:\Temp\");
        odbcConnectionString.Add("Extensions", "asc,csv,tab,txt");
        odbcConnectionString.Add("Persist Security Info", "False");
        Console.WriteLine(odbcConnectionString.ConnectionString);

        DbConnectionStringBuilder dbConnectionString = new DbConnectionStringBuilder();
        dbConnectionString.Add("Driver", "{Microsoft Text Driver (*.txt; *.csv)}");
        dbConnectionString.Add("Dbq", @"C:\Temp\");
        dbConnectionString.Add("Extensions", "asc,csv,tab,txt");
        dbConnectionString.Add("Persist Security Info", "False");
        Console.WriteLine(dbConnectionString.ConnectionString.Replace("\"", string.Empty)); //<-- My Workaround.

以下是.Net小提琴的链接:https://dotnetfiddle.net/3qhB5S

1 个答案:

答案 0 :(得分:0)

几年前,我尝试了同样的方法,最终围绕UI的DBConnection类进行了抽象,最终用户必须在该类中选择并连接到数据库服务器。 然后,我为sqlserver和mysql实施了规则,以便最终结果根据实现的数据库服务可以处理的规则进行调整。

对于查询执行,我基于ado.net的DbConnection和DbCommand类创建了一个包装器。