System.Net.Mime.ContentDisposition disposition = myAttachment.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
myMail.Attachments.Add(myAttachment);
}
}
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(txtSService.Text.Trim(), Convert.ToInt32(txtServicePort.Text.Trim()));
client.Credentials = new System.Net.NetworkCredential(txtUName.Text.Trim(), txtUPwd.Text.Trim());
client.Send(myMail);
MessageBox.Show("邮件发送成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
2、 数据库的自动备份与还原
如下图,数据库的备份与还原的界面并不复杂,难点在在通过客户端完成数据库后台的工作。
图 19
其代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace CRM.SysManage
{
public partial class frmDataStore : Form
{
CRM.BaseClass.BaseOperate boperate = new CRM.BaseClass.BaseOperate();
public frmDataStore()
{
InitializeComponent();
}
//设置备份文件的位置
private void btnSel_Click(object sender, EventArgs e)
{
fbDialogFile.ShowDialog();
txtDSPath.Text = fbDialogFile.SelectedPath.ToString().Trim() + "\\";
}
private void btnDStore_Click(object sender, EventArgs e)
{
try
{
//判断其是否已经存在
if (File.Exists(txtDSPath.Text.Trim() + ".bak"))
{
MessageBox.Show("该文件已经存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtDSPath.Text = "";
txtDSPath.Focus();
}
//数据库的备份仍然使用的是SQL语句,LINQ更适合于数据的控制而不是数据库的底层操作
else
{
boperate.getcom("backup database db_CRM to disk='" + txtDSPath.Text.Trim() + ".bak'");
MessageBox.Show("数据备份成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
3、 在程序中调用其他的软件(如记事本)
在帮助功能中,还可以快速的打开记事本、WORD的软件,以下为C#中调用外部程序的代码:
private void 启用记事本toolStripMenuItem_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("notepad.exe");
}
private void 启用WordtoolStripMenuItem_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("winword.exe");
}
private void 启用ExceltoolStripMenuItem_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("excel.exe");
}
三、系统的测试与纠错
在测试系统的过程中,系统出现了如下的几个问题:
1) 使用的第三方导航栏插件NavBar由于是试用版,有时候只能显示却不能展开,即导航栏有时会失效。但由于没有找到其他的免费的第三方导航栏插件,就没有做改动,但这个问题也影响了整个程序的完整性。
2) 在使用水晶报表的时候,第一次使用需要再次输入数据库的登录名和密码,显然这是一个系统设计的错误,能查看报表的用户不一定都有数据库的后台密码,在对水晶报表属性中的集成安全性就行了设置以后,该问题圆满解决。
3) 在对系统的查询系统进行测试的时候发现,有一些应该有结果的查询查询出来的结果居然为空,检查代码后发现,是编写代码的时候部分正则表达式书写出错,修改后再次测试,显示正常。
4) 邀请了同宿舍的同学帮忙使用系统,未再发现重大的程序错误,程序设计完成。
后 记
毕业设计的系统至今已然完成,回想从选题、需求分析、代码编写、系统测试等过程中的收获,我感到收获良多。
1) 系统设计不是一件简单的事情,从需求分析开始就要做大量的调查与规划,由于时间急促,本系统的逻辑结构并不复杂,但代码的编写量确实不小,有时候越是心急反而越发现不了不应该的小错误。 |