在连接字符串密码中使用非 ASCII 字符

Using non-ascii characters in connection string password

我正在编写一个实用程序来处理一堆遗留的 Access '97 .MDB 文件。我需要以编程方式连接到它们,并且不允许将文件转换为较新版本的 Access。到目前为止,没什么大不了的。他们中的大多数都是密码保护的,但密码真的很奇怪:

我发现将此字符串设置为文本框的默认文本会破坏我的代码。我可以使用以下代码读取密码并将其加载到我的表单上的文本框中:

FileStream Reader = new FileStream(openFileDialog2.FileName, FileMode.Open);
byte[] StringData = new byte[Reader.Length];
Reader.Read(StringData, 0, StringData.Length);
String strPassword = Encoding.Default.GetString(StringData);

txtReadPassword.Text = strPassword;
strDatabasePassword = strPassword;

如果我此时将字符串写到控制台,最后一个字符不会出现,但带有重音符号的国会大厦 E 会出现。我通过以下代码使用读取密码生成连接字符串:

public static string GetConnectionString(string strDataSource, string strPassword)
        {
            return String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Mode=Share Deny None;data source={0};password={1};", strDataSource, strPassword,"Jet OLEDB:Database ");
        }

并且返回的连接字符串确实包含特殊字符:

密码正确,因为我可以copy/paste它进入访问并打开数据库。当我尝试通过此代码使用该连接字符串时:

private void btnConnectToDatabase_Click(object sender, EventArgs e)
        {
            System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection();

                try
                {
                    connection.ConnectionString = strConnectionString;
                    connection.Open();
                    Console.WriteLine("Connected!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Failed to connect to data source" + ex.ToString());
                }
        }

我得到这个结果:

第 78 行是上面的 "connection.ConnectionString = strConnectionString;"。我认为索引 137 是连接字符串中的最后两个字符,它们是密码中的奇怪字符。

生成并打开这些 .MDB 文件的 "no-longer-supported" 应用程序正在以编程方式连接到它们,因此必须有一种方法可以做到这一点。我已经三天没有找到解决方案了,所以我正在寻求帮助。

@Pierce 根据 Access 的版本,Microsoft 针对密码中的字符数制定了这些最棒的规范。所以就像 rad 一样,Access 2003 及以下版本是 14 个字符,而 Access 2007+ 是 20 个字符。尝试使用 20 个字符,因为您在示例中使用了 22 个字符。甜蜜!

对于那些尽管密码长度适当(最多 14/20 个字符)仍然存在此问题的用户,请将密码值封装在撇号或转义引号中:

"...;Password=\"passwordÈ┘\""

"..;Password='passwordÈ┘'"