繁体   English   中英

在连接字符串密码中使用非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 ");
        }

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

在此处输入图片说明

该密码是正确的,因为我可以将其复制/粘贴到access中,然后它会打开数据库。 当我尝试通过此代码使用该连接字符串时:

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文件的“不再受支持”应用程序正在以编程方式连接到它们,因此必须有一种方法来实现。 解决方案距我已经三天了,所以我正在寻求帮助。

@Pierce Microsoft对密码中的字符数有最严格的规定,具体取决于Access的版本。 因此,就像rad一样,Access 2003及以下版本为14个字符,Access 2007+为20个字符。 由于示例中使用的是22个字符,因此请尝试一下20个字符。 甜!

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

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

要么

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM