今天上午写了一段代码,但最后 编译始终是出现了一个错误,把程序所需的数据库的位置改变了,我一直没有想明白这个问题是怎么发生的。但问题的根本还是没有明白。所以先做个记号。
我的数据库连接字符串是"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=/myrecord.mdb;Persist Security Info=False",这个就存在程序 的运行目录中的。当我调用 了一个方法以后,程序运行就会把这个数据库的位置改变。
这个方法我在想也没有改动过程序运行的位置
Dim img As String = MD5Compute(phbook.Id & UserName)
Phbookctr1.setimg(img)
'md5加密函数,加密id &user
Friend Function MD5Compute(ByVal str As String) As String
Dim md5 As New MD5CryptoServiceProvider
Dim username As Byte() = (New ASCIIEncoding).GetBytes(str)
'转换为哈希值Byte数组
Dim mdByte As Byte() = md5.ComputeHash(username)
'MD5Compute = (New ASCIIEncoding).GetString(mdByte)
Return System.BitConverter.ToString(mdByte) & ".bpg"
End Function
'设置头像
Public Sub setimg(ByVal img As String)
Dim imgfile As String = Application.StartupPath & "/userdata/" & img
If Open.FileName <> "" Then
My.Computer.FileSystem.CopyFile(Open.FileName,imgfile,True)
'Else
' MsgBox("未设置头像!")
End If
End Sub
如果 我的图片位置是在桌面,那么我所需的数据库文件也会在运行了这两个方法之后 出现错误,提示在桌面上找不到指定的文件。只要是图片在什么地方,那么数据库文件的路径就会变成那个地方,从而就导致程序的错误 。中午想了一半天没有想明白。如果把数据库的连接字符串改为Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "/myrecord.mdb;Persist Security Info=False" 这样,那 么就不会出现问题了。
难道是因为运行application.startuppath改变了程序 所在的路径。但实际上我检查也没有发现这个变量的值 被改变。所以问题没有明白 。
晚上把代码拷回家,然后发现了一个错误“无法在证书存储区中找到清单签名证书 ”,这个错误是因为clickonce 引起的,把项目属性当中的签名的勾去掉就能解决 了。这是通过 搜索发现解决的方法的。