编写一个c#窗体,实现在窗体上可以浏览数据库上的文件,并且在窗体上可以对这些文件进行上传或者下载等操作

时间: 2024-04-07 14:33:23 浏览: 16
以下是一个简单的 C# 窗体示例,实现了浏览数据库中文件、上传文件和下载文件的功能。请确保你已经安装了 System.Data.SqlClient 和 System.IO 命名空间。 ```csharp using System; using System.Data.SqlClient; using System.IO; using System.Windows.Forms; namespace FileBrowser { public partial class MainForm : Form { // 数据库连接字符串 private string connectionString = "Data Source=服务器名称;Initial Catalog=数据库名称;User ID=用户名;Password=密码"; public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { LoadFilesFromDatabase(); } // 从数据库加载文件列表 private void LoadFilesFromDatabase() { // 清空文件列表 listBoxFiles.Items.Clear(); try { using (SqlConnection connection = new SqlConnection(connectionString)) { // 打开数据库连接 connection.Open(); // 查询数据库中的文件列表 string sql = "SELECT FileName FROM Files"; SqlCommand command = new SqlCommand(sql, connection); SqlDataReader reader = command.ExecuteReader(); // 将文件名添加到列表框中 while (reader.Read()) { string fileName = reader.GetString(0); listBoxFiles.Items.Add(fileName); } // 关闭数据阅读器和数据库连接 reader.Close(); connection.Close(); } } catch (Exception ex) { MessageBox.Show("加载文件列表失败:" + ex.Message); } } // 上传文件到数据库 private void btnUpload_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); if (openFileDialog.ShowDialog() == DialogResult.OK) { string fileName = openFileDialog.FileName; try { using (SqlConnection connection = new SqlConnection(connectionString)) { // 打开数据库连接 connection.Open(); // 读取文件内容 byte[] fileContent = File.ReadAllBytes(fileName); // 插入文件到数据库 string sql = "INSERT INTO Files (FileName, FileContent) VALUES (@FileName, @FileContent)"; SqlCommand command = new SqlCommand(sql, connection); command.Parameters.AddWithValue("@FileName", Path.GetFileName(fileName)); command.Parameters.AddWithValue("@FileContent", fileContent); command.ExecuteNonQuery(); // 关闭数据库连接 connection.Close(); // 重新加载文件列表 LoadFilesFromDatabase(); } } catch (Exception ex) { MessageBox.Show("上传文件失败:" + ex.Message); } } } // 下载选定的文件 private void btnDownload_Click(object sender, EventArgs e) { if (listBoxFiles.SelectedItem == null) { MessageBox.Show("请先选择要下载的文件"); return; } string fileName = listBoxFiles.SelectedItem.ToString(); try { using (SqlConnection connection = new SqlConnection(connectionString)) { // 打开数据库连接 connection.Open(); // 查询文件内容 string sql = "SELECT FileContent FROM Files WHERE FileName = @FileName"; SqlCommand command = new SqlCommand(sql, connection); command.Parameters.AddWithValue("@FileName", fileName); byte[] fileContent = (byte[])command.ExecuteScalar(); // 保存文件到本地 SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.FileName = fileName; if (saveFileDialog.ShowDialog() == DialogResult.OK) { File.WriteAllBytes(saveFileDialog.FileName, fileContent); MessageBox.Show("文件下载成功"); } } } catch (Exception ex) { MessageBox.Show("下载文件失败:" + ex.Message); } } } } ``` 在这个示例中,我们使用了一个 `listBoxFiles` 列表框来显示数据库中的文件列表。`btnUpload` 按钮用于上传文件到数据库,`btnDownload` 按钮用于下载选定的文件。 在 `LoadFilesFromDatabase` 方法中,我们从数据库中查询文件列表,并将文件名添加到 `listBoxFiles` 列表框中。 在 `btnUpload_Click` 方法中,我们使用 `OpenFileDialog` 对话框选择要上传的文件。然后,我们读取文件的内容,并将文件和文件名插入到数据库中。 在 `btnDownload_Click` 方法中,我们首先检查用户是否选择了要下载的文件。然后,我们从数据库中查询选定文件的内容,并使用 `SaveFileDialog` 对话框指定下载文件的保存路径。 请记得根据你的实际情况修改数据库连接字符串和数据库表结构等信息。

相关推荐

最新推荐

recommend-type

在类库或winform项目中打开另一个winform项目窗体的方法

主要介绍了在类库或winform项目中打开另一个winform项目窗体的方法,可以实现Winform项目间窗体的调用,在进行Winform项目开发中非常具有实用价值,需要的朋友可以参考下
recommend-type

C# WinForm实现窗体上控件自由拖动功能示例

主要介绍了C# WinForm实现窗体上控件自由拖动功能,涉及WinForm控件属性及事件响应相关操作技巧,需要的朋友可以参考下
recommend-type

简单实现C#窗体程序判断是否闰年

主要介绍了简单实现C#窗体程序判断是否闰年的相关代码,禁止窗体调整大小,关闭窗体前的判断,感兴趣的小伙伴们可以参考一下
recommend-type

C#实现让窗体永远在窗体最前面显示的实例

主要介绍了C#实现让窗体永远在窗体最前面显示,功能非常实用,需要的朋友可以参考下
recommend-type

C#实现winform用子窗体刷新父窗体及子窗体改变父窗体控件值的方法

主要介绍了C#实现winform用子窗体刷新父窗体及子窗体改变父窗体控件值的方法,涉及C#窗体交互的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。