我使用Access数据库在C#中创建了一个软件投诉跟踪系统。
基本上,它已经完成,但我在质疑在客户端的PC上安装它的位置? 我试图在DataDirectory中安装它,但是我收到了一个错误:
操作必须在应用程序中使用可更新查询。
我的连接字符串是1) initializationError(com.ex.test.1_UT)
org.junit.runners.model.InitializationError
at org.junit.runners.ParentRunner.validate(ParentRunner.java:346)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:74)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:55)
at org.robolectric.RobolectricTestRunner.<init>(RobolectricTestRunner.java:84)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
at org.junit.runner.Computer.getRunner(Computer.java:38)
at org.junit.runner.Computer$1.runnerForClass(Computer.java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:98)
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:84)
at org.junit.runners.Suite.<init>(Suite.java:79)
at org.junit.runner.Computer.getSuite(Computer.java:26)
at org.junit.runner.Request.classes(Request.java:69)
at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:98)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:53)
at org.junit.runner.JUnitCore.main(JUnitCore.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
t java.lang.reflect.Method.invoke(Method.java:606)
at com.vladium.emma.rt.AppRunner$Invoker.run(AppRunner.java:655)
at java.lang.Thread.run(Thread.java:745)
FAILURES!!!
Tests run: 1, Failures: 1
我通过installshield
如何解决此问题?
答案 0 :(得分:0)
由于您有一个带有 | DataDirectory | 的ConnectionString,因此数据库文件很可能位于程序文件夹中,并且由于安全权限,用户无法写入文件。
因此,您应该修改安装数据库文件的位置(APPDATA,如果每个用户,请参见下文)。 如果添加以下代码以告知应用程序占位符 | DataDirectory | 应替换为APPDATA文件夹
,则连接可保持不变AppDomain.CurrentDomain.SetData("DataDirectory", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
| DataDirectory目录| (用管道符号括起来)是一个替换字符串,表示数据库的路径。它消除了对完整路径进行硬编码的需要,这导致了几个问题,因为数据库的完整路径可以在不同的地方序列化。 DataDirectory还可以轻松共享项目以及部署应用程序。
要设置DataDirectory属性,请调用
AppDomain.SetData
方法。如果未设置DataDirectory属性,则将应用以下默认规则来访问数据库文件夹:
- 对于放在用户计算机上的文件夹中的应用程序,数据库文件夹使用应用程序文件夹。
- 对于在ClickOnce下运行的应用程序,数据库文件夹使用创建的特定数据文件夹。
Source: SQL Server Forum(我强调的重点)
10.1默认情况下,您的应用必须安装在Program Files文件夹中 对于%ProgramFiles%中的本机32位和64位应用程序,以及在x64上运行的32位应用程序的%ProgramFiles(x86)%。 由于为此文件夹配置了安全权限,因此绝不能将用户数据或应用数据存储在此位置。
10.3您的应用数据必须在计算机上的用户之间共享,应存储在 ProgramData
中10.4您的应用数据是特定用户专有且无法与计算机的其他用户共享,必须存储在用户\&lt;用户名&gt; \ AppData
Source: Certification requirements for Windows Desktop Apps (我强调的重点)