c# - System.Reflection.TargetInvocationException in Jet CompactDatabase -
i want compact database, using com library in first attempts, comes (gets installed) access database. tried accomplish same thing using jet since wanted run without microsoft access installed on machine. getting exception when program installed in program files (x86). temp file doesn't exist.
system.reflection.targetinvocationexception: exception has been thrown target of invocation. ---> system.runtime.interopservices.comexception: microsoft jet database engine cannot open file 'c:\program files (x86)\universal instruments\uic help\temp.mdb'. opened exclusively user, or need permission view data. --- end of inner exception stack trace --- @ system.runtimetype.invokedispmethod(string name, bindingflags invokeattr, object target, object[] args, boolean[] byrefmodifiers, int32 culture, string[] namedparameters) @ system.runtimetype.invokemember(string name, bindingflags bindingflags, binder binder, object target, object[] providedargs, parametermodifier[] modifiers, cultureinfo culture, string[] namedparams) @ uic_help.myeditabletreeview.compactandrepairaccessdb(string accessfile) @ uic_help.myeditabletreeview.save() @ uic_help.frmmain.frmmain_formclosing(object sender, formclosingeventargs e) @ system.windows.forms.form.onformclosing(formclosingeventargs e) @ system.windows.forms.form.wmclose(message& m) @ system.windows.forms.form.wndproc(message& m) @ system.windows.forms.control.controlnativewindow.onmessage(message& m) @ system.windows.forms.control.controlnativewindow.wndproc(message& m) @ system.windows.forms.nativewindow.callback(intptr hwnd, int32 msg, intptr wparam, intptr lparam) here's code
string connectionstring = @"provider=microsoft.jet.oledb.4.0;data source=" + mydatabase.directory; //filling parameters array object[] oparams = new object[] { connectionstring, "provider=microsoft.jet.oledb.4.0;data" + " source=" + tempfile + ";jet oledb:engine type=5"}; //create instance of jet replication object object objjro = activator.createinstance(type.gettypefromprogid("jro.jetengine")); //invoke compactdatabase method of jro object //pass parameters array objjro.gettype().invokemember("compactdatabase", system.reflection.bindingflags.invokemethod, null, objjro, oparams); //clean (just in case) system.runtime.interopservices.marshal.releasecomobject(objjro); objjro = null; //database compacted //to new file c:\\temp.mdb //let's copy on old 1 , delete temp.copyto(mydatabase.directory, true); temp.delete();
Comments
Post a Comment