关于VB.NET项目打包后数据库无法写入数据的解决方案
2014-05-04 20:19
441 查看
啊哈,辛辛苦苦的,连跑带滚的终于把自己的软件做完了,不过,一直有个疑惑在心中,每次将软件打包成安装包,再进行安装后,打开自己的应用程序,总是会提示数据库写入数据失败,也就是提示“操作必须使用一个可用的更新”等这样的错误,第一次看到时候,心里面直接凉了半截,心想,坏事了,这次做的程序竟然在这个阶段不能使用了,当时在编写环境下运行,可没有出现这种情况啊……
喝了杯水,让自己冷静了一下,回想着自己做数据库,自己写代码过程中,没有错误,也没有警告,应该不会出错啊,为了安全,数据库设置了密码……等等!好像我不设置数据库密码的时候,打包安装并没有出现过这个问题啊,难道是设置密码的问题?但是数据库也不能不设置密码啊,为了数据安全,是吧。
苦思冥想了很长时间,我就有点不耐烦了,不过,一个偶然的机会,让我到数据库文件的安全性上看到了一些破绽。
我们单击下面的,打开文件位置按钮。
之后我们找到数据库文件,右键单击属性,貌似只读和隐藏属性都没有被选中,说明不是因为这个引起的,我们再看看还有什么。
好像,还有个安全性的选项。恩恩,单击编辑。
之后我们勾选了完全控制,下面的复选框基本就自动勾选了,入下面的图。
单击确定,重新运行了软件,发现了很神奇的一幕,也就是,可以写入数据了!
欣喜万分啊~看来自己的工作没有白做,但是这样对于用户来说,就有点麻烦了,而且数据库文件一般都是隐藏的属性,怎么办呢?
查阅了一些资料,我终于明白的其中的秘密,嘘~小声点,我就给你说!
我发现,数据库文件在软件安装的目录下,在windows7及其以上系统中,和应用程序一个文件夹下的数据库文件会自动的提高安全属性,所以我们必须这样设置,来解决应用程序对数据库文件的写入和删除等非只读操作。
那么也就是说,只要我们把数据库文件不和主程序文件放到一起,就可以了,那么,这就涉及到修改数据库连接字符串了,使用相对路径。
原来的代码,是这样的~
Public Class DBOperation
'定义一个数据库操作类函数,其传入的参数是查询字符串,返回值的类型是内存中的数据表DataTable
Shared Function DBOperate(ByVal SQLString As String) As DataTable
Dim CONN As String
CONN = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=true;Data Source=SEB.mdb;Jet OLEDB:Database Password=***;"
Dim oleconn As New OleDb.OleDbConnection(CONN)
Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(SQLString, oleconn)
cmd.CommandType = CommandType.Text
Dim sTokens() As String
End Function 我们可以看到,在连接字符串中,直接就写明了数据来源,但是这样就要求数据库文件必须和主程序文件在同一个文件夹下,我将代码段改成下面的后,这个问题就解决了:
Public Class DBOperation
'定义一个数据库操作类函数,其传入的参数是查询字符串,返回值的类型是内存中的数据表DataTable
Shared Function DBOperate(ByVal SQLString As String) As DataTable
Dim CONN As String
CONN = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=true;Data Source=|DataDirectory|\Sources\SEB.mdb;Jet OLEDB:Database Password=***;"
Dim oleconn As New OleDb.OleDbConnection(CONN)
Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(SQLString, oleconn)
cmd.CommandType = CommandType.Text
Dim sTokens() As String
End Function 我们注意到,这段代码Data Source=|DataDirectory|\Sources\SEB.mdb,就说明,我们把数据库文件放置在程序根目录下的Sources文件夹下,这样就解决了这个问题。
相关文章推荐
- 关于 $http.get在项目打包后,手机端运行无法取得数据
- Visual Studio .net 2003 关于“试图运行项目时出错:无法在Web服器上启动调试。您不具备调试此应用程序的权限。”的新解决方案
- 关于 $http.get在项目打包后,手机端运行无法取得数据
- 关于asp.net网站发布后,使用登录控件和注册控件时出现“数据库只读,无法进行数据更新”的解决方法
- vb.net怎么利用textbox修改数据库中的数据???
- 关于用VC,VB进行图像数据(二进制大对象)存储数据库的一点心得
- 关于在执行hibernate3.0的save方法后数据无法添加到数据库的问题
- asp.net 开发的WEB项目和数据库打包成exe安装文件
- asp.net2.0中关于ASP.NET 网站管理工具无法连接sql server 数据库的处理
- 【转】[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!
- VB.net查询获取数据库数据信息
- 关于VS提示“无法直接启动带有类库输出类型的项目”的可能解决方案
- 关于在SSH项目中使用OpenSessionInViewFilter过滤器后数据库数据不更新的问题
- vs2003提示:试图运行项目时出错:无法在WEB服务器上启动调试.未能启动ASP.NET或ATL SERVER 调试. 验证服务器上是否正确安装了ASP.NET或ATL SERVER的解决方案
- vs2003 打开VS.NET项目时遇到 “无法从web服务器获取项目文件” 解决方案
- 图片保存到数据及从数据库读出(winform,c# 和vb.net)
- VB .NET 读取数据库数据处理后再循环插入数据库
- 在VB.NET中,将数据库里的数据导出到Excel中
- 关于数据库image数据类型数据的读取和写入