我正在编写一个实用程序来处理一堆旧的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 ");
}
返回的连接字符串确实包含特殊字符:
密码正确,因为我可以将其复制/粘贴到访问中并打开数据库。当我尝试通过此代码使用该连接字符串时:
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文件的“不再支持”应用程序以编程方式连接到它们,因此必须有一种方法。解决方案现在已经躲过我三天了,所以我正在寻求帮助。
答案 0 :(得分:2)
@Pierce Microsoft根据Access的版本,对密码中的字符数有这些最棒的规范。所以就像rad一样,Access 2003及以下版本是14个字符,Access 2007+是20个字符。因为你在你的例子中使用了22个字符,所以给出20个字符。 SWEET!
答案 1 :(得分:0)
对于那些尽管密码长度正确(最多14/20字符)仍然存在此问题的人,请将密码值封装在撇号或转义引号中:
"...;Password=\"passwordÈ┘\""
或
"..;Password='passwordÈ┘'"