如何在将已保存的文件从MS SQL Server 2008检索到本地驱动器时获取文件扩展名

时间:2014-02-04 06:58:55

标签: c# sql-server-2008

我正处于这样一种情况,我想在MS SQL SERVER 2008中保存和检索所有类型的文件,我可以保存并检索任何文件但没有扩展名,例如,如果我将xyz.txt文件保存到数据库中,我在本地驱动器上检索它看起来像xyz,没有扩展名,是的,如果我们手动提供扩展,那么我们可以看到它的内容。

以下是我的表格图片 Table

用于将任何文件类型保存到数据库的C#代码

 private void cmdSave_Click(object sender, EventArgs e)
    {
        try
        {
            //Read File Bytes into a byte array
            byte[] FileData = ReadFile(txtFilePath.Text);

            //Initialize SQL Server Connection
            SqlConnection CN = new SqlConnection(txtConnectionString.Text);

            //Set insert query
            string qry = "insert into FilesStore (OriginalPath,FileData) values(@OriginalPath, @FileData)";

            //Initialize SqlCommand object for insert.
            SqlCommand SqlCom = new SqlCommand(qry, CN);

            //We are passing Original File Path and File byte data as sql parameters.
            SqlCom.Parameters.Add(new SqlParameter("@OriginalPath", (object)txtFilePath.Text));
            SqlCom.Parameters.Add(new SqlParameter("@FileData", (object)FileData));

            //Open connection and execute insert query.
            CN.Open();
            SqlCom.ExecuteNonQuery();
            CN.Close();

            //Close form and return to list or Files.
            this.Close();
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

用于从数据库检索文件到本地驱动器的C#代码

private void btnSaveFromDBToDisk_Click(object sender, EventArgs e)
    {
         try
         {
             //Check if a file is selected in Grid
             if (dataGridView1.CurrentCell ==null)
             {
                 MessageBox.Show("Select a file in Grid first.");
                 return;
             }

             int SelectedRow = dataGridView1.CurrentCell.RowIndex;
             string OriginalPath = DS.Tables[0].Rows[SelectedRow]["OriginalPath"].ToString();

             saveFileDialog1.FileName = OriginalPath;

             DialogResult DR = saveFileDialog1.ShowDialog();
             if (DR == DialogResult.OK)
             {
                 string FileName = saveFileDialog1.FileName;
                 //Get File data from dataset row.
                 byte[] FileData = (byte[])DS.Tables["FilesStore"].Rows[SelectedRow]["FileData"];
                 //Write file data to selected file.
                 using (FileStream fs = new FileStream(FileName, FileMode.Create))
                 {
                     fs.Write(FileData, 0, FileData.Length);
                     fs.Close();
                 }

                 MessageBox.Show("File saved successfully to ");
             }
         }
         catch(Exception ex)
         {
             MessageBox.Show(ex.ToString());
         }
    }

该项目如何运作的图像。

http://i.stack.imgur.com/dqYMe.jpg

Save and retrieve image project, unable to see file extension as in step 6 arrow

您可以从此处http://www.shabdar.org/sql-server/121-store-or-save-files-in-sql-server-database-using-c.html

下载此项目

3 个答案:

答案 0 :(得分:1)

“已知文件类型的扩展名”的系统设置是什么?

转到Windows资源管理器,按Alt,选择“工具|文件夹选项”,选择“查看”选项卡,并选中“隐藏已知文件类型的扩展名”?如果是,请取消勾选并单击“确定”。

如果那是问题,现在一切都应该没问题! :)

答案 1 :(得分:0)

将原始文件路径存储在数据库中时,只需使用System.IO.Path.GetFileName("")即可将文件名扩展名为。然后 您可以在计算机上创建要保存文件的新路径。

答案 2 :(得分:0)

您可以使用System.IO.Path.GetExtension()获取文件扩展名:

string fileName = @"C:\a\b\c\test.mp3";
string extension = System.IO.Path.GetExtension(fileName);