【问题标题】:How to retieve a excel file from sql database如何从sql数据库中检索excel文件
【发布时间】:2013-12-30 06:04:11
【问题描述】:

我在我的应用程序中使用引导程序。我在 sql db 中存储了一个 excel 文件。

这是我的代码;

Default.aspx

 <div class="control-group">
  <label class="control-label">
   Upload</label>
  <div class="controls">
   <input id="fileupload" type="file" runat="server"/>
  </div>
 </div>
<asp:Button ID="btnSave" runat="server" OnClick="btnSave_Click"  />

Default.aspx.cs

  protected void btnSave_Click(object sender, EventArgs e)
    {               
            string filePath = Server.MapPath("~/Upload/");
            HttpFileCollection hfc = Request.Files;

            if (!Directory.Exists(filePath))
            {
                Directory.CreateDirectory(filePath);
            }          
            if (hfc.Count != 0)
            {
                string contenttype = String.Empty;

                    HttpPostedFile hpf = hfc[i];

                    string fileExtn = Path.GetExtension(hfc[i].FileName).ToLower();

                    if (fileExtn == ".xls" || fileExtn == ".xlsx" || fileExtn == ".xlmx")
                    {                      
                        switch (fileExtn)
                        {

                            case ".xls":

                                contenttype = "application/excel";

                                break;

                            case ".xlsx":

                                contenttype = "application/excel";

                                break;

                            case ".xlmx":

                                contenttype = "application/excel";

                                break;
                        }

                        if (hpf.ContentLength > 0)
                        {
                            string SPfilePath = Server.MapPath("~/Upload/");
                            string filepath = SPfilePath + System.IO.Path.GetFileName(hpf.FileName);
                            hpf.SaveAs(filepath);                                                       
                            string ContentType = hpf.ContentType;
                            int fileLen = hpf.ContentLength;
                            byte[] fileBytes = new byte[fileLen - 1];
                            hpf.InputStream.Read(fileBytes, 0, fileBytes.Length);
                             byte[] Data = fileBytes;                     
                        }
                       new DefaultManager().SaveFile(Data , fileLen ,filepath ,ContentType );
                }
            }
            UploadMsg = auditmgr.AddClientAuditReport(, audit);         
        }
    }

这里我将ContentType 保存为varchar(256),filepath 为varchar(256),fileLen 为int,Data 为varchar(max) 在db 中。它被添加到数据库中。但我不知道如何从 db 检索该 excel 文件。

我在 SQL db 中以字节为单位存储该 excel 文件

【问题讨论】:

    标签: c# mysql sql sql-server excel


    【解决方案1】:

    首先将“Data as varchar(max)”的数据类型更改为 varbinary(max),然后将文件内容保存到数据库中

    //对于从数据库中检索文件,您可以使用此代码

    DataTable dt = GetFileDetailFromDatabase(fileID: 20); // here you select data from database, for Ex. fileID is 20
    
    string strpath = @"C:\Download\" + dt.Rows[0]["FileName"].ToString(); // if you are storing file name(Only file name with extension not full file path) in database other wise give any temp file name with same extension which file had at the time of save in database
    
    FileStream flStrm = new FileStream(strpath, FileMode.Create);
    Byte[] Buffer = (Byte[])dt.Rows[0]["Data"];
    flStrm.Write(Buffer, 0, Buffer.Length);
    flStrm.Close();
    Buffer = null;
    

    【讨论】:

      【解决方案2】:
       DataTable dtReport = GetDataFromDatabase(fileID: 20);     
       Response.Clear();
       Response.Buffer = true;
       Response.ContentType = Path.GetExtension(dtReport["FileName"]).ToString();
       Response.AddHeader("content-disposition", "attachment;filename=" + Path.GetFileName(dtReport["FileName"]).ToString());
       Response.ContentType = Path.GetExtension(dtReport["FileName"]).ToString();
       Response.Charset = "";
       Response.Cache.SetCacheability(HttpCacheability.NoCache);
       Response.BinaryWrite((byte[])dtReport["Data"]);
       Response.End();
      

      【讨论】:

      • 如果您使用的是 asp.net,请在您的问题中添加“ASP.NET”标签
      猜你喜欢
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      相关资源
      最近更新 更多