我正在尝试使我的应用程序数据库不可知,因此我选择使用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
答案 0 :(得分:0)
几年前,我尝试了同样的方法,最终围绕UI的DBConnection类进行了抽象,最终用户必须在该类中选择并连接到数据库服务器。 然后,我为sqlserver和mysql实施了规则,以便最终结果根据实现的数据库服务可以处理的规则进行调整。
对于查询执行,我基于ado.net的DbConnection和DbCommand类创建了一个包装器。