我正在编写一个实用程序来处理一堆传统的Access '97.MDB文件。我需要以编程方式连接到它们,并且我不允许将这些文件转换为更新版本的Access。到目前为止,没有什么大不了的。其中大多数是密码保护,但密码是非常奇怪:在连接字符串密码中使用非ASCII字符
我发现,使这个字符串文本框会打破我的代码默认文本艰辛的道路。我能看懂的密码,并将它与下面的代码加载到一个文本框的窗体上:
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文件的“不再支持”应用程序以编程方式连接到它们,因此必须有一种方法。该解决方案已经避开了三天,所以我正在寻求帮助。
你用unicode试过:String strPassword = Encoding.Unicode.GetString(StringData); – Gustav 2015-04-03 09:39:14
我无法重现您的问题。我的C#应用程序打开数据库密码为“54BÈ┘”的Access97数据库文件没有问题。但是,我确实必须将连接字符串参数从'; password =54BÈ┘'更改为'; Jet OLEDB:Database Password =54BÈ┘',否则Jet OLEDB认为数据库具有用户级别安全性(ULS)启用和投诉关于找不到工作组信息文件。 – 2015-04-03 11:43:08
Gustav,我试过了,密码变成了中文字符...并且不起作用。 – Pierce 2015-04-03 14:07:20