如何在C# WinForms环境下使用LINQ将PDF/Word文档上传至数据库
ICube银行应用 文件上传功能实现方案
项目资金申请表参考

前置准备
- 先在你项目的资金申请表对应数据库表中新增2个字段:
BudgetFileName:类型为nvarchar(200),存储上传的文件原名(带后缀,方便后续下载识别格式)BudgetFileContent:类型为varbinary(MAX),存储文件的二进制内容
- 同步更新你的LINQ数据上下文的表结构映射
- WinForm界面添加2个控件:
OpenFileDialog(命名为openFileDialogBudget)、上传按钮(命名为btnUploadBudget),给文件选择控件设置格式过滤:openFileDialogBudget.Filter = "PDF文件|*.pdf|Word文档|*.docx;*.doc"
上传功能核心代码
using System.IO; // 上传按钮点击事件 private void btnUploadBudget_Click(object sender, EventArgs e) { if (openFileDialogBudget.ShowDialog() != DialogResult.OK) return; try { // 1. 读取选中文件为二进制数组 string selectFilePath = openFileDialogBudget.FileName; byte[] fileBinary = File.ReadAllBytes(selectFilePath); string fileName = Path.GetFileName(selectFilePath); // 2. 用LINQ写入数据库 // 注意替换下面的上下文、实体名、当前申请记录ID为你项目对应的值 using (var db = new 你自己的LINQ数据上下文类名()) { var currentFundApply = db.你的资金申请表实体名.FirstOrDefault(a => a.申请记录ID字段 == 当前编辑的申请ID); if (currentFundApply != null) { currentFundApply.BudgetFileName = fileName; currentFundApply.BudgetFileContent = fileBinary; db.SubmitChanges(); // 如果你用的是EF框架,替换为 db.SaveChanges() MessageBox.Show("预算文件上传成功"); } } } catch (Exception ex) { MessageBox.Show("上传失败:" + ex.Message); } }
可选:文件下载功能代码(方便测试验证)
private void btnDownloadBudget_Click(object sender, EventArgs e) { using (var db = new 你自己的LINQ数据上下文类名()) { var currentFundApply = db.你的资金申请表实体名.FirstOrDefault(a => a.申请记录ID字段 == 当前编辑的申请ID); if (currentFundApply == null || currentFundApply.BudgetFileContent == null) { MessageBox.Show("未找到对应预算文件"); return; } SaveFileDialog saveDlg = new SaveFileDialog(); saveDlg.FileName = currentFundApply.BudgetFileName; if (saveDlg.ShowDialog() == DialogResult.OK) { File.WriteAllBytes(saveDlg.FileName, currentFundApply.BudgetFileContent); MessageBox.Show("文件已保存到:" + saveDlg.FileName); } } }
注意事项
上述方案完全适配你期末项目的小文件上传需求,无需额外引入第三方组件,代码逻辑简单易调试。如果后续有大文件上传需求,再考虑磁盘存储+数据库存路径的方案即可。
内容的提问来源于stack exchange,提问作者user12873396
相关产品推荐
相关产品推荐

