Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenFileDialog在尝试获取以前在VB.NET Windows窗体中打开的sql数据库的名称时锁定该文件_Sql_Vb.net_Openfiledialog - Fatal编程技术网

OpenFileDialog在尝试获取以前在VB.NET Windows窗体中打开的sql数据库的名称时锁定该文件

OpenFileDialog在尝试获取以前在VB.NET Windows窗体中打开的sql数据库的名称时锁定该文件,sql,vb.net,openfiledialog,Sql,Vb.net,Openfiledialog,我有一个子系统,通过OpenFileDialog打开sql数据库。当我试图重新打开以前打开过的数据库时,问题就出现了。让我举一个例子: 我首先打开数据库“mydatabase.mdf”->Result OK 然后我打开第二个数据库“Seconddatabase.mdf”->Result OK 现在,当我尝试重新打开“mydatabase.mdf”时,OpenFileDialog会触发一个错误,并说“此文件正在使用。请写另一个名称”。好吧,信息不是这个,这是我翻译成英语的,因为在我的系统中,它是西

我有一个子系统,通过OpenFileDialog打开sql数据库。当我试图重新打开以前打开过的数据库时,问题就出现了。让我举一个例子: 我首先打开数据库“mydatabase.mdf”->Result OK 然后我打开第二个数据库“Seconddatabase.mdf”->Result OK 现在,当我尝试重新打开“mydatabase.mdf”时,OpenFileDialog会触发一个错误,并说“此文件正在使用。请写另一个名称”。好吧,信息不是这个,这是我翻译成英语的,因为在我的系统中,它是西班牙语的“Este archivo estáen uso.Escriba un nombre o cierre el archivo abierto en otro programa”。 我绝对肯定这个问题是由OpenFileDialog引起的,因为如果我尝试使用SaveFileDialog执行相同的过程,则没有文件锁定,我可以打开并重新打开数据库,但这不是一个解决方案,因为对话框中说用户要保存文件,而不是打开。 我做了另一个检查,插入了一个按钮控件,在这个控件中我重新打开了第一个硬编码的数据库,它工作了,所以问题出在OpenFileDialog中。 这是我的代码,但代码不是问题所在(我认为):

Private Sub AbrirBaseDados()
Dim fildia作为新的OpenFileDialog
如果是fildia.ShowDialog(),则
尝试
如果fildia.FileName vbNullString,则
pathBaseDados=(fildia.FileName)
CadenaConexion=“数据源=(LocalDB)\v11.0;AttachDbFilename=“&pathBaseDados&”集成安全性=True;连接超时=30”
如果结束
特例
结束尝试
Desconectar()
fildia.Dispose()
如果结束
端接头
sub没有抛出异常,它只是OpenDialogFile告诉我文件正在使用,不允许我获取要打开的文件的名称。因为我只想知道用户指定的数据库文件的名称,因为知道名称我可以毫无问题地打开它


非常感谢。Mdf是数据库文件,不是普通文件

如果要对数据库执行读写操作,请先阅读一些教程:


如果您只想从给定目录获取数据库文件的名称,请使用:

Dim filePaths As String() = Directory.GetFiles(YourFolderPath, "*.mdf")
编辑:

使用
openFileDialog.ValidateNames=False

Dim fildia As New OpenFileDialog
fildia.ValidateNames = False

为什么要对数据库使用OpenFileDialog?你不能使用Sql*类吗。。SqlConnection、SqlCommand等等。OpenFileDialog只是与用户进行对话,以查找名称。只是为了构建StringConnection(在我的示例中是CadenaConexion)。此sub没有打开任何内容,只是获取我要打开的文件的名称。该文件是在另一个子系统中打开的,可以正常工作。我编辑了这个问题,以便更清楚(我希望)您是否正确地处理了数据库外连接?您可以在问题中添加连接关闭代码。您是否尝试将fildia.ValidateNames设置为False?是的,我将在尝试打开之前关闭连接。唯一的问题是OpenFileDialog,但是使用.ValidateNames=False技巧,没有问题,程序正常打开数据库。非常感谢。嗨,编码员。我想获得用户指定的数据库的名称,而不仅仅是所有的名称,这就是我使用OpenFileDialog的原因。作为一个数据库不是一个问题,因为正如我所说的,知道数据库的名称我可以打开数据库。问题是告诉OpenFileDialog告诉我用户想要打开的文件的名称,不管它认为该文件是否正在使用(不是)。非常感谢,编码员。这就是我要找的!如果.validatenames=false,则OpenFileDialog可以工作;)
Dim fildia As New OpenFileDialog
fildia.ValidateNames = False