C#学习纪要(2):7月9日

7月9日 星期四 天气还是晴得不得了

今天主攻目标是数据库的备份和还原,写完这个应该两天之内就可以完成整个向导模块拉。

先记录问题:

(1)SQLDMO在.net中无法找到。

解决:The SQLDMO object comes from the SQLDMO.dll that ships with SQL Server 2000.  The dll itself is a COM object and you must reference it from your .net project as such.  The IDE will create the necessary COM wrappers needed to use the library.  NOTE: IF YOU USE THE STATEMENT "using SQLDMO;" IN YOUR APP YOU MAY GET AN ERROR.

上面这段话解释一切拉。所以要先在工程中添加对SQLDMO的引用。SQLDMO stands for SQL Distributed Management Object.

(2) LINQ是怎么弄的?项目使用LINQ来读写数据库。

解决:看《C#高级编程(第6版)》第27章。笔记晚点另外作文补上。

(3) 属性的使用有问题,编译无误,运行堆栈溢出。

解决:属性的使用错误。因为就是简单地在字段后面加一个代码段,里面放一个get代码段,一个set代码段即可。其实不然,看看这个例子吧。太粗心了。

       private int _accountNumber; 

       // AccountNumber只读属性
        public int AccountNumber

        {
            
get

            

               
 return _accountNumber;
             }

        }

        其实这样写才是正确的。

(3) 保存文件怎么写。SaveFileDialogue跟OpenFileDialogue有什么区别?

解决:其实跟打开文件对话框的使用非常类似:

SaveFileDialogue savefileDlg = new SaveFileDialogue();

if (savefileDlg.showDialogue()==DialogueResult.OK)

{

      TextBoxFilePath.Text = savefileDlg.FileName;

}

(4)按照上面的方法,设置文件后文件对话框仍然存在。

(5)无法备份,出错信息:

[Microsoft][ODBC SQL Server Driver][SQL Server]无法打开设备'D:/gfs",出现系统错误5(拒绝访问)[Microsoft][ODBC SQL Server Driver][SQL Server]BACKUP DATABASE正在异常终止。

7月10日 星期五 天气晴啊晴啊晴

(今天继续解决昨天的问题。。。。。)

解决:将备份文件名在程序中硬编码写成:@"**.**"即可。

SQLDMO.Backup类对象的fileName属性原来赋值是文件保存对话框的FileName属性,即输入的某个路径,如:D:/gfs。这样写就会报出上面的错误,但是改成解决的样子就没问题了。

但是发现如果写成@"D:/gfs",这样还是会报错,而且关键的是写成@"**.**"的形式虽然是可以过,但是备份文件根本找不到!

解决2:发现原因的所在了。网上说的两种方法,不管是用SQLDMO还是直接写SQL语句,都是直接调用数据库服务器自带的服务。也就是说备份是由数据库来备份,所以数据库写入的路径是根据他自己的服务路径来写的,比如说默认安装路径的SQL Server,备份的路径是C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/Backup。那为什么我找不到呢?因为数据库服务器在远程机器上,所以备份是备份在远程机器上,根本不是写在本地机器上,这样就可以解释上面那个错误了。因为远程机器上的SQL服务器根本没有在本地磁盘写文件的权限。

解决方案:目前计划是自己来写一个备份类,即导出数据库数据并按照自己定制的格式来保存。唯有这样才能满足项目的两个需要:一要保存在本地,二要可定制地导出数据,比如导出某段时间内的数据。

(6)ProgressBar几乎没有进度显示就成功完成备份,跳到下一页了。

解决:原因是SQLDMO.Backup对象中的BackupSink_PercentCompleteEventHandler并没有给出正确的Percent,调试的时候发现Percent一直为0.

解决:根据上面的解决方案,定制数据库导出类的时候,再自行写一个事件就好了。不过原因还是没有找出啊。

(总结一下,今天仍没有完全解决昨日留下的问题。下午有点气馁,还好没有太影响工作,下午换一下脑子去点低技术含量的工作,将n个向导都做好,因为有了模版,很快的。。。)

明天是大周要加班,明日再会吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值