从 SQL 服务器检索文件,用扩展图标显示它们并阅读它们

Retrieve files from SQL Server, display them with extension's icon and read them

我已将 table 中的文件保存为二进制文件。我需要检索它们,显示文件名及其扩展图标并打开它。

我已经使用 SQL 服务器查询来检索与频道相关的所有文件并将它们存储在数据 table 中。之后,我遍历每个文件以获取其名称、扩展名和数据。现在我需要显示文件。

public void getAttachedFiles(int id)
{
        string fileName;
        string fileExtension;
        string fileData;

        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = Utilities.ConnectionString;

        conn.Open();

        string query = "select cf.Name, cf.ContentType, cf.Data from [dbo].[Channels_Files] cf where cf.ChannelId = "+ id;

        DataTable listFiles = new DataTable();
        SqlDataAdapter adp = new SqlDataAdapter(query, conn);

        adp.Fill(listFiles);

        foreach (DataRow dataRow in listFiles.Rows)
        {
            fileName = dataRow.ItemArray[0].ToString();
            fileExtension = dataRow.ItemArray[1].ToString();
            fileData = dataRow.ItemArray[2].ToString();
            displayFile(fileName,fileExtension,fileData);
        }
}

displayFile函数必须将文件从二进制转换并显示。我需要知道如何转换每个文件并显示文件列表,其中每个文件都将显示其扩展名图标。

我看过这篇文章,但不清楚。

Retrieve files from SQL Server database

我按如下方式解决了我的问题:

我创建了一个 listView 并向其添加了一个 imageList。

我将扩展程序的图标添加到图像列表中。

然后我检索了所选频道的文件二进制数据、名称和扩展名。

   public void getAttachedFiles(int id)
        {
            imageList.Items.Clear();
            docList.Items.Clear();
            string fileName;
            string fileExtension;
            byte[] fileData;
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = Utilities.ConnectionString;
            conn.Open();
            string query = "select cf.Data,cf.Name,cf.ContentType from[dbo].[Channels_Files] cf where cf.ChannelId =" + id;
            DataTable listFiles = new DataTable();
            SqlDataAdapter adp = new SqlDataAdapter(query, conn);
            adp.Fill(listFiles);
            foreach (DataRow dataRow in listFiles.Rows)
            {

                fileData = (byte[])dataRow.ItemArray[0];
                fileName = dataRow.ItemArray[1].ToString();
                fileExtension = dataRow.ItemArray[2].ToString();
                displayFile(fileName,fileExtension, fileData);
            }
        }

然后我将项目添加到 listView 我将文件的 ID 保存为 Item 键以及 imageView 的文件名和扩展图像索引。

docList.Items.Add(Convert.ToBase64String(fileData), fn, 3);

然后选择合适的图标。

 private void displayFile(string fn,string fe, byte[] fileData)
    {

        switch(fe.ToString())
        {
            case ".pdf":
                docList.Items.Add(Convert.ToBase64String(fileData), fn,0);
                break;
            case ".doc":
            case ".docx":
                docList.Items.Add(Convert.ToBase64String(fileData), fn, 2);
                break;
            case ".xls":
            case ".xlsx":
                docList.Items.Add(Convert.ToBase64String(fileData), fn, 1);
                break;
            case ".dwg":
                docList.Items.Add(Convert.ToBase64String(fileData), fn, 3);
                break;
            case ".bmp":
            case ".jpg":
            case ".jpeg":
                imageList.Items.Add(Convert.ToBase64String(fileData), fn, 5);
                break;
            default:
                docList.Items.Add(Convert.ToBase64String(fileData), fn, 4);
                break;
        }
    }