1

我正在使用 fileupload 上传文件,文件的详细信息(例如文件类型、文件名和完整路径)存储在数据库中名为 exceldetails 的表中,现在我想显示上传的文件并通过单击链接下载它们GridView 中每个文件旁边的按钮。这就是我上传文件的方式:

        string[] filePaths;
    string strFileType = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();
    string strFileName = FileUpload1.PostedFile.FileName.ToString();
    FileUpload1.SaveAs(Server.MapPath("~/Import/" + strFileName + strFileType));
    string strNewPath = Server.MapPath("~/Import/" + strFileName + strFileType);
    string strNewPath1 = Server.MapPath("~/Import/" + strFileName + strFileType).ToString();
    fileSize = FileUpload1.PostedFile.ContentLength / 1024;

    //EXCEL DETAILS TABLE
    con.Open();
    //=========================================
    DataTable dt8 = new DataTable();
    SqlCommand cmd8 = new SqlCommand("insert into exceldetails (name,type,details,size,path)" + "values(@name,@type,@details,@size,@path)", con);
    cmd8.Parameters.Add("@name", SqlDbType.VarChar).Value = strFileName;
    cmd8.Parameters.Add("@type", SqlDbType.VarChar).Value = strFileType;
    cmd8.Parameters.Add("@details", SqlDbType.VarChar).Value = DateTime.Now;
    cmd8.Parameters.Add("@size", SqlDbType.Int).Value = fileSize;
    cmd8.Parameters.Add("@path", SqlDbType.NVarChar).Value = strNewPath;
    cmd8.ExecuteNonQuery();
    con.Close();
    try
    {
        SqlDataAdapter da8 = new SqlDataAdapter(cmd8);
        da8.Fill(dt8);
    }
    catch { }

我是初学者,你可以从问题本身来判断,所以请告诉我我需要在哪里添加详细信息

4

3 回答 3

2

你的代码也很乱

尝试将其更改为类似这样的插入:

using( SqlConnection cn = new SqlConnection( "Your Conn String" ) )
{
    cn.Open();
    string sqlInsert = "INSERT STATEMENT";
    string fileName = FileUploadControl.FileName;
    string fileExtension = fileName.Substring( fileName.LastIndexOf( "." ), fileName.Length - fileName.LastIndexOf( "." ) );
    string filePath = "~/Import/" + fileName + fileExtension;
    int fileSize = FileUploadControl.PostedFile.ContentLength / 1024;

    FileUploadControl.SaveAs( Server.MapPath( filePath ) );

    using( SqlCommand cmd = new SqlCommand( sqlInsert, cn ) )
    {
        cmd.Parameters.AddWithValue( "@name", fileName );
        cmd.Parameters.AddWithValue( "@type", fileExtension );
        cmd.Parameters.AddWithValue( "@details", DateTime.Now );
        cmd.Parameters.AddWithValue( "@size", fileSize );
        cmd.Parameters.AddWithValue( "@path", filePath );
        cmd.ExecuteNonQuery();
    }
}

这是为了让数据绑定

using( SqlConnection cn = new SqlConnection( "Your Conn String" ) )
{
    string sqlSelect = "SELECT STATEMENT";

    using( SqlDataAdapter da = new SqlDataAdapter( sqlSelect, cn ) )
    {
        DataTable dt = new DataTable();
        da.Fill( dt );

        //bind data
    }
}

还要考虑使用中继器,它比网格视图灵活得多。

于 2012-11-02T12:07:54.120 回答
0

您必须在网格中添加一个超链接列,其导航 URL 应设置为

"~/Import/" + strFileName + strFileType

您将整个物理路径存储在数据库中,同时您应该将“~/Import/”+ strFileName + strFileType 存储在数据库中,并将该列用作下载链接列的数据源。

于 2012-11-02T11:51:24.330 回答
0

这是我如何使用 gridview 模板项执行此操作的示例:

<asp:TemplateField>
    <ItemTemplate>
      <asp:HyperLink ID="HyperLink1"
         runat="server"
         NavigateUrl='<%# Eval("AttachmentID", "GetAttachment.aspx?ID={0}") %>'
         ImageUrl="~/Images/Download16.png"
         Target="_blank"
         Height="16px"
         Width="16px">
      </asp:HyperLink>
    </ItemTemplate>
</asp:TemplateField>

但是,我的附件文件存储在数据库中。我有一个页面,它接受一个标识附件的查询字符串参数,然后用于获取附件并让用户下载它。您应该修改超链接的 navigateURL 属性以链接到需要下载的内容。请注意,“AttachmentID”是由网格的数据源选择的字段,您可能会使用“FilePath”或类似的东西。

于 2012-11-02T12:24:33.437 回答