我在使用Winform应用程序中的JRO来压缩Windows Server 2008 R2(64位)服务器上的访问数据库时遇到问题。我也跟着下面的步骤:64位windows 2008服务器上的Compact Access 2007数据库
发展PC的配置:
操作系统:Windows XP专业版:2002(SP3)32位
的MSOffice 2003安装:是
的Visual Studio:2010高级
Net框架:4.0。 30319
两个的WinForm下面的代码应用程序创建:
应用1:压缩Access 2007中DB
目标平台设置为x86和微软的Jet新增参考和复制对象2.6库
配置文件:
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup>
<appSettings>
<add key="SourceDB" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Test\Test2007.accdb;Jet OLEDB:Engine Type=5"/>
<add key="DestDB" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Test\Test2007BK.accdb;Jet OLEDB:Engine Type=5"/>
<add key="AppDB" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Test\Test2007.accdb;" />
</appSettings>
</configuration>
代码:
string SrcDBName = ConfigurationManager.AppSettings["SourceDB"];
string DestDBName = ConfigurationManager.AppSettings["DestDB"];
int ReturnCode = 0;
JRO.JetEngine objJRO = null;
try
{
MessageBox.Show("Start Compact");
objJRO = new JRO.JetEngine();
objJRO.CompactDatabase(SrcDBName, DestDBName);
MessageBox.Show("End Compact");
}
catch (Exception ex)
{
MessageBox.Show("Error in Compact");
ReturnCode = -1;
StackTrace STrace = new StackTrace(ex, true);
StackFrame StkFrame = STrace.GetFrame(STrace.FrameCount - 1);
string Disp_Msg = "Message:\t" + ex.Message + Environment.NewLine;
Disp_Msg += "Error Date:\t" + DateTime.Now.ToString("dddd, MMM d yyyy HH:mm:ss");
//MessageBox.Show(Disp_Msg, "Compact Utility", MessageBoxButtons.OK, MessageBoxIcon.Error);
File.AppendAllText(Path.GetDirectoryName(Application.ExecutablePath) + @"\CompactErr.txt", Disp_Msg + Environment.NewLine + "Stack Trace:\t" + ex.StackTrace + Environment.NewLine + Environment.NewLine);
}
finally
{
Marshal.ReleaseComObject(objJRO);
objJRO = null;
}
应用2:对于存取测试连接2007
private void Form1_Load(object sender, EventArgs e)
{
try
{
//Connection Test
MessageBox.Show("Start DBConn");
TestConn();
MessageBox.Show("End DBConn");
}
catch (Exception ex)
{
MessageBox.Show("Error in Conn Opening");
string Disp_Msg = "Message:\t" + ex.Message + Environment.NewLine;
Disp_Msg += "Error Date:\t" + DateTime.Now.ToString("dddd, MMM d yyyy HH:mm:ss");
File.AppendAllText(Path.GetDirectoryName(Application.ExecutablePath) + @"\CompactErr.txt", Disp_Msg + Environment.NewLine + "Stack Trace:\t" + ex.StackTrace + Environment.NewLine + Environment.NewLine);
}
}
public void TestConn()
{
string strConnectionString = ConfigurationManager.AppSettings["AppDB"];
DbConnection objConnection;
DbProviderFactory objFactory = OleDbFactory.Instance;
objConnection = objFactory.CreateConnection();
objConnection.ConnectionString = strConnectionString;
objConnection.Open();
objConnection.Close();
}
现在高于2 ex e为部署的Win2008服务器上:
服务器详细信息:
的Windows Server 2008 R2(SP1) - 64
NO的MSOffice
NO的Visual Studio
安装:Microsoft Office Access数据库引擎2010
案例1:安装Access DB Engine 2010(64位)时:
链接:http://www.microsoft.com/download/en/details.aspx?id=13255
- 连接访问2007(Test2007.accdb)正确地完成
- 在执行步骤2使用JRO DB的紧凑没有奏效
- 错误消息:
消息:未注册的类
堆栈跟踪:在JRO.IJetEngine.CompactDatabase(String SourceConnection,String Destconnection) at CompactUtility.Program.Main(String [] args)
案例2:安装Access数据库引擎2007年的时候:
链接:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23734
- 连接访问2007(Test2007。ACCDB)不这样做
- 使用JRO在执行步骤1工作正常
- 错误信息DB的结构紧凑:
消息:“Microsoft.ACE.OLEDB.12.0”提供者未在本地机器上注册的。
任何建议/帮助将高度赞赏解决在Windows Server 2008(64位)服务器上工作。
而且审阅下面的链接,但没有帮助:
Microsoft.ACE.OLEDB.12.0 provider is not registered
感谢, 沙阿