C#与Sql Server 2008 R2图书信息管理系统源码解析:基于VS2015与.NET...
C#与Sql server 2008 R2图书信息管理系统源码带注释VS2015版本.net4.5框架最近在整理硬盘翻出个古董项目——基于C#和SQL Server 2008 R2的图书管理系统。虽然技术栈有点年头但架构设计现在看依然有参考价值。随手打开尘封的VS2015解决方案带各位看看当年码农的生存现状笑。C#与Sql server 2008 R2图书信息管理系统源码带注释VS2015版本.net4.5框架数据库连接模块有个挺有意思的封装直接看这段带味道的代码public class DBHelper { // 记得当年被这个连接字符串折磨了三天 private static string connStr Data Source.\SQLEXPRESS; Initial CatalogBookDB; Integrated SecurityTrue; Poolingfalse; public static SqlConnection GetConnection() { var conn new SqlConnection(connStr); // 这里埋过雷曾经漏了Open()直接返回 conn.Open(); return conn; } }当年没好好用using语句现在看这个连接池设置成false简直作死。不过亮点在异常处理——全局只在一处捕获典型的新手操作别学try { using(var conn DBHelper.GetConnection()) { var cmd new SqlCommand(SELECT * FROM Books WHERE Price price, conn); cmd.Parameters.AddWithValue(price, 50); // 比拼接字符串安全多了 // 这里有个坑当年不知道SqlDataAdapter会自动开闭连接 var adapter new SqlDataAdapter(cmd); var table new DataTable(); adapter.Fill(table); return table; } } catch(SqlException ex) { // 曾经直接throw ex把堆栈信息丢了被师傅骂惨 throw new Exception(数据库抽风了, ex); }数据访问层用了个半吊子的仓储模式这查询方法现在看简直暴力public ListBook SearchBooks(string keyword) { // 当年不知道LINQ to SQL的好硬怼SQL string sql SELECT * FROM Books WHERE Title LIKE %key% OR Author LIKE %key%; // 参数化查询防注入是最后的倔强 var param new SqlParameter(key, SqlDbType.NVarChar) { Value keyword }; // 手动映射字段的过程极其枯燥 using(var reader ExecuteReader(sql, param)) { var list new ListBook(); while(reader.Read()) { var book new Book(); book.Id Convert.ToInt32(reader[Id]); // 这里曾经因为字段名大小写不一致崩过 book.ISBN reader[ISBN].ToString().Trim(); // ...其他字段赋值 list.Add(book); } return list; } }界面层用了WinFormDataGridView直接绑定DataTable这种上古操作private void btnSearch_Click(object sender, EventArgs e) { // UI线程直接操作数据库现在看要报警 var keyword txtKeyword.Text.Trim(); var books _bookService.SearchBooks(keyword); // 当年不知道BindingSource直接暴力刷新 dataGridView1.DataSource null; dataGridView1.DataSource books; // 这个列头处理方式太硬核 dataGridView1.Columns[Id].HeaderText 编号; dataGridView1.Columns[ISBN].HeaderText 国际书号; // ...其他列配置 }最骚的是导出Excel功能用到了古老的Office Interopvar excelApp new Microsoft.Office.Interop.Excel.Application(); // 没处理COM对象释放运行几次就内存泄漏 var workbook excelApp.Workbooks.Add(); var worksheet (Worksheet)workbook.Worksheets[1]; // 用单元格坐标硬编码改需求得重写 worksheet.Cells[1, 1] 图书清单; for (int i 0; i dataGridView1.Rows.Count; i) { // 曾经因为索引越界在这里崩溃过N次 worksheet.Cells[i2, 1] dataGridView1.Rows[i].Cells[ISBN].Value; // ...其他列赋值 } // 没有try-catchExcel进程关不干净 workbook.SaveAs(C:\\temp\\export.xlsx); excelApp.Quit();这个项目虽然现在看槽点满满但完整实现了增删改查、搜索、导出等基础功能。源码里随处可见的//TODO注释记录着当年熬夜调试的血泪史。建议新人可以当反面教材学习重点注意数据库连接池的正确配置使用参数化查询防SQL注入资源释放的规范写法特别是COM对象业务逻辑与UI层的分离异常处理的完整性源码里最值钱的是那些被注释掉的错误写法堪称初级程序员成长实录。想要完整代码的老规矩——三连后私信手动狗头。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2428054.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!