问题描述
我做了个WINFORM程序,里面有个DataGridView,可以获取SQL数据库的数据,并显示出来。现在想做个数据库备份功能,就是对数据库文件MDF和LDF两个文件进行拷贝操作,但只要WINFORM程序一开始运行,对这个文件的读取FileStreamfs=File.OpenRead(文件路径);这句话就会出IO异常:正由另一进程使用,因此该进程无法访问此文件。但只要关了WINFORM,就可以对他目录下的数据库文件随便复制粘贴了。麻烦大家帮忙想想办法,在不关闭WINFORM前提下对那两个数据库文件进行复制操作。
解决方案
解决方案二:
因为你的程序在使用数据库,断开连接才可以
解决方案三:
你的程序正在使用数据库啊。
解决方案四:
我知道在占用,但即使我写在Program.cs里,staticvoidMain(){FileCopy.CopyDir();boolbCreatedNew;Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Mutexm=newMutex(false,"Fly",outbCreatedNew);if(bCreatedNew){Application.Run(newMainForm());}}FileCopy.CopyDir()这个方法就是复制数据库文件到另一个地方,也会出现同样错误,试了好多方法,都不管用。
解决方案五:
对于SQl的库,没有分离的数据库文件是不能执行“复制”的操作的吧?要想进行“复制”操作应该先分离数据库吧?lz你在使用者数据库的同时还想进行这种操作,应该是不行的吧你打开着一个Word文件,对这个文件也是不能进行这个操作的吧
解决方案六:
难道就没有办法了吗?我在程序的哪个地方锁定这个程序被占用了呢?能不能先停止下占用呢??我就想不明白了,为啥在Main()里面最上面写的这个方法,也会出现同样的错误,根本还没有被使用~希望明白的朋友帮忙解释一下:)啊~受不了!KMN!
解决方案七:
只要关了WINFORM,就可以对他目录下的数据库文件随便复制粘贴了。这个不能吧,还没分离不会让你随便拷的。可以用sql语句备份数据库啊生成bak文件
解决方案八:
备份数据库不是这么备份的啊,大哥
解决方案九:
执行sql语句BACKUPDATABASE数据库名称TODISK='c:数据库备份.bak'
解决方案十:
我倒是也想引用SQLDMO.DLL来进行数据库备份,但目标电脑不一定有SQLDMO,而且不一定进行了REGSRV32注册,如果直接复制数据库文件,会方便的多,毕竟数据库不大,最多时才20万条数据。如果用存储过程,也会有变故,而且我用的是LINQTOSQL,没必要这么麻烦。高手们,麻烦想想办法吧,大过年的,辛苦了。
解决方案十一:
用sql语句,不是说了吗
解决方案十二:
LINQTOSQL也是可以执行sql语句的.
解决方案十三:
数据库没有分离无法复制哪怕你直接ctrl+C然后粘贴都不行
解决方案十四:
我发现,如果KILL掉servr.exe进程,就可以复制粘贴了。但系统有两个servr.exe进程,杀掉用户那个才可以,杀掉系统那个或两个都杀掉,就不行了。如果只kill掉用户进程servr.exe??
解决方案十五:
你个笨蛋,思路太死了去建立个数据库再把你的表复制过去没有表就建立个简单的sql语句全部搞定干嘛搞这么复杂?解决不了绕过去
解决方案:
对了你这个问题可能是由于adatper造成的,他要把数据库的数据读取到dataset中,还要把dataset中修改后的数据再返回到数据库,所以这个时候复制时不容许的,但是把update功能去掉我觉得能行你也可以试试
解决方案:
我不知道如何表达我的想法了。你结束进程当然能复制了,结束进程。sqlserver的服务也给停止了!!!这种情况是绝对不允许的。
解决方案:
直接把网下扯了在吧服务关了再启动去通过工具备份不建议这样做最好用命令备份
解决方案:
允许复制时暂停服务的话就先停掉SQL服务,然后复制黏贴ldf和mdf,再重启动服务。否则还是Backup-Restore大法吧。我觉得这样设计是合理的,因为复制文件总会有时间差,这个时间差内要如何保证数据信息和日志信息是绝对一致的呢?貌似也只能停服务了。
解决方案:
其实真的可以绕过去引用14楼zbq666的回复:
你个笨蛋,思路太死了去建立个数据库再把你的表复制过去没有表就建立个简单的sql语句全部搞定干嘛搞这么复杂?解决不了绕过去
解决方案:
引用楼主mecaser的回复:
云计算能为企业数据中心带来哪...如何评判一个系统是否有必要迁...云计算中的网络新技术应用?云存储架构是怎样的?云计划的云字什么含义?我做了个WINFORM程序,里面有个DataGridView,可以获取SQL数据库的数据,并显示出来。现在想做个数据库备份功能,就是对数据库文件MDF和LDF两个文件进行拷贝操作,但只要WINFORM程序一开始运行,对这个文件的读取……
呵呵ls给的思路在你的程序中通过第三方库,直接由SQL语句分离你的目标数据库,完后复制到你所谓的备份处然后再执行Sql语句把你的库在给附加上变态的需要往往要用变态的方法来搞
解决方案:
你可已把硬盘拆下来,挂到别的电脑上复制完了.再拆回来
解决方案:
不需要断开链接的方法:去建立个数据库再把你的表复制过去或者用ado.net断开链接也不会影响前台使用.意思是把数据复制到内存.断开链接.备份.重新链接.
解决方案:
你的那种想法我实现过了,做了一个类似SqlServer管理器的东西,也能列出数据库对象。在这里面进行各种操作,包括你说的那种备份物理文件。其实在备份开始还是用代码将数据库文件进行了分离,备份完后再用代码附加上去。这是肯定的,也就是意味着没有人在使用这个库了,才由你备份。否则不可能备份物理文件的。