您的连接字符串将您的数据库定位在固定的位置,仅在您的PC上有效。
一个简单的解决方法是使用| DataDirectory |替换字符串。
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=|DataDirectory|\MP1.accdb"
通过这种方式,您可以通过代码控制数据库的位置。
通常(对于桌面应用程序)| DataDirectory |替换字符串指向安装应用程序的相同文件夹,但您需要具有写入权限,任何类型的活动数据库都需要对其文件进行写入权限。所以这不是数据库文件的最佳位置。
但是,您可以使用这样的代码更改DataDirectory指向的位置。 (当然,把它之前的任何企图跟数据库)
' Prepare a string pointing to a subfolder of the common application data
Dim appFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
Dim dbFolder = Path.Combine(appFolder, "MyAppFolder")
' Create the folder if it doesn't exist.
Directory.CreateDirectory(dbFolder)
' Change the substitution string kept by DataDirectory
AppDomain.CurrentDomain.SetData("DataDirectory", dbFolder)
现在为你的数据库的目标目录将是C:\ programdata \ myappfolder您的应用程序具有读/写权限
更多信息在DataDirectory目录
Where is DataDirectory
DataDirectory where is documented
我相信你试图说你想让你的数据库连接字符串是动态的。所以当你移动你的应用程序文件夹时,项目可以找到你的数据库。那是对的吗? –
您是否试过'。\ MP1.accdb'的数据源?根据http://stackoverflow.com/questions/5001980/app-config-connection-string-relative-path,相对路径是有效的。 – 2013-08-01 14:40:52