- 关键技术及实现过程
访问数据库,在用户登录、用户信息管理以及对图书信息进行增删改查的处理操作上,使用LINQ链接数据库并显示在datagridview中的操作。
登录界面,点击登录按钮出发click事件,检验验证通过,实现窗体跳转到主界面。
进入图书信息管理操作,使用LINQ链接数据库并处理数据的实现:
- 添加LINQ to SQL组件;
- 创建对象模型:定义若干个映射数据库表的类,并使用元数据属性声明它为实体类;
- 应用对象模型:先创建DataContext类的实例,再创建并执行LINQ查询,实现具体的
数据的查询、增加、更新和删除。
导出Excel,引入了Microsoft.Office.Interop.Excel程序集,添加一个ExportDGVToExcel类,创建Excel对象并获取,定义存放的文件名、文件类型等,进行自定义设置获得的sheet1,创建缓存数据,获取数据,验证DataGridView单元格中的类型,如果是string或是DataTime类型,则在放入缓存时在该内容前加入“”;将datagridview中的数据写入Excel中。
图书信息的读取和写入二进制文件,创建了FileStream文件流对象,并基于该对象创建了BinaryWriter对象,调用BinaryWriter对象的写入文件内容;继续创建BinaryReader对象,调用BinaryReader对象的读取文件内容,最后显示到listbox中。
使用Random()方法随机产生数字验证码进行登录验证操作;使用try catch方法实现用户输入的合法性检验;在主界面中,添加了menuStrip、toolStrip、statusStrip三种菜单工具栏,使用Timer组件实现时间的显示,屏幕保护程序;使用imagelist实现图书图片的切换等等。
主要程序代码
- 访问数据库代码
<connectionStrings>
<add name="BookSystem.Properties.Settings.BookConnectionString"
connectionString="DataSource=DESKTOP-A1H5BN9;InitialCatalog=Book; Integrated Security=True";providerName="System.Data.SqlClient" />
</connectionStrings>
//修改图书信息
private void btnmodify_Click(object sender, EventArgs e){
BookDataContext db = new BookDataContext();//实例化LINQ类对象
var results = from r in db.book
where r.book_id == bookid.Text.Trim()
select r;//根据ID查询得到数据集
if (results != null){
foreach (book r in results)//遍历数据集{
r.book_name = bookname.Text.Trim();//将对应的数据重新赋值到r对象中
r.author = bookaut.Text.Trim();
r.publisher = bookpub.Text.Trim();
r.date = Convert.ToDateTime(bookdate.Text.Trim());
r.price = Convert.ToDecimal(bookpri.Text.Trim());
r.book_class = bookclass.Text.Trim();
r.num = Convert.ToInt32(booknum.Text.Trim());
}
db.SubmitChanges();//提交修改到数据库
MessageBox.Show("修改成功");
Bind();
btnclear_Click(sender, e);//清空 调用重置
}
}
- 文件读写代码
private void btnSave_Click(object sender, EventArgs e)
{
FileStream fs = new FileStream(@"d:\data\bookinfo.dat", FileMode.Append, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);//创建二进制文件流写文件
bw.Write(Int32.Parse(bookid.Text));
bw.Write(bookname.Text);//写入姓名
bw.Write(bookaut.Text);
bw.Write(bookpub.Text);
bw.Write(bookdate.Text);
bw.Write(bookpri.Text);
bw.Write(bookclass.Text);
bw.Write(booknum.Text);
fs.Close();
bw.Close();
}
private void btnShow_Click(object sender, EventArgs e)
{
lstShow.Items.Clear();//清除重置
lstShow.Items.Add("书号\t书名\t作者\t出版社\t出版日期\t\t定价\t图书分类\t库存数量");
FileStream fs = new FileStream(@"d:\data\bookinfo.dat", FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
fs.Position = 0;
while (fs.Position != fs.Length)//逐条读取对应项的数据
{
int book_id = br.ReadInt32();
string book_name = br.ReadString();
string author = br.ReadString();
string publisher = br.ReadString();
string date = br.ReadString();
string price = br.ReadString();
string book_class = br.ReadString();
string num = br.ReadString();
string result = string.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}", book_id, book_name, author, publisher, date, price, book_class, num);//占位符放进三个值
lstShow.Items.Add(result);
}
br.Close();
fs.Close();
}
-
导入Excel代码
private void ExportExcels(string fileName, DataGridView myDGV){ string saveFileName = ""; SaveFileDialog saveDialog = new SaveFileDialog(); saveDialog.DefaultExt = "xls"; saveDialog.Filter = "Excel文件|*.xls"; saveDialog.FileName = fileName; saveDialog.ShowDialog(); saveFileName = saveDialog.FileName; if (saveFileName.IndexOf(":") < 0) return; //被点了取消 Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); if (xlApp == null)//判断datagridview中内容是否为空 { MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel"); return; } Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet); Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1 //写入标题 for (int i = 0; i < myDGV.ColumnCount; i++) { worksheet.Cells[1, i + 1] = myDGV.Columns[i].HeaderText; } //写入数值 for (int r = 0; r < myDGV.Rows.Count; r++) { for (int i = 0; i < myDGV.ColumnCount; i++) { worksheet.Cells[r + 2, i + 1] = myDGV.Rows[r].Cells[i].Value; } System.Windows.Forms.Application.DoEvents(); } worksheet.Columns.EntireColumn.AutoFit();//列宽自适应 if (saveFileName != "") { try { workbook.Saved = true; workbook.SaveCopyAs(saveFileName); } catch (Exception ex) { MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message); } } xlApp.Quit(); GC.Collect();//强行销毁 MessageBox.Show("文件: " + fileName + ".xls 保存成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);