繁体   English   中英

ASP:将文件路径完整复制到我的代码隐藏方法中

[英]ASP: Copying a file path in full into my code-behind method

我想将一个excel文件复制到我的数据库中。 我遇到的问题是我似乎无法将路径从复制到后台代码中。 这是我的asp代码:

    <asp:FileUpload id="FileUploadControl" runat="server" />
    <asp:Button runat="server" id="UploadButton" text="Upload" onclick="UploadButton_Click" />
    <br /><br />
    <asp:Label runat="server" id="StatusLabel" text="Upload status: " />

如果我在路径中硬编码,那么我的代码将起作用:

string path = @"C:\Users\moynik\Desktop\datatest.xls";

但是,如果我使用以下行,则只会得到一条不起作用的不同路径。

string path = Path.GetFullPath(FileUploadControl.FileName);

但是我需要使路径动态化,以便用户可以从自己的计算机上的不同目标上载。 谁能帮我吗。 这是起作用的功能,并将excel文件复制到我的数据库中

如果这不可能,那么如果有人想到一个解决方案,有人可以帮助我。 谢谢

protected void UploadButton_Click(object sender, EventArgs e)
{
    if (FileUploadControl.HasFile)
    {
        try
        {
            string path = @"C:\Users\moynik\Desktop\datatest.xls";
            string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0;";



    using (OleDbConnection connection = new OleDbConnection(connStr))
            {
                OleDbCommand command = new OleDbCommand ("Select Name,Address,Age FROM [Sheet1$]", connection);

                connection.Open();

                using (DbDataReader dr = command.ExecuteReader())
                { 
                    string sqlConnectionString = "SERVER=<servername>;UID=schafc;Trusted_Connection=Yes;DATABASE=<dbname>;";

                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
                    {
                        bulkCopy.DestinationTableName = "<tableName>";
                        bulkCopy.WriteToServer(dr);
                    }
                }
            } 
            StatusLabel.Text = "Upload status: File uploaded!";
        }
        catch (Exception ex)
        {
            StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
        }
    }
}

FileUpload控件是服务器端控件,并且代码

Path.GetFullPath(FileUploadControl.FileName); 

在服务器上执行,而不是在客户端上执行。 我不确定“我需要使路径动态化,以便用户可以从自己的计算机上的不同目标上载”是什么意思。 用户始终可以从计算机上的任何目标位置选择文件。

尝试使用Path.GetFileName(FileUploadControl.FileName)而不是.GetFullPath

http://asp.net-tutorials.com/controls/file-upload-control/

编辑:啊,我刚刚弄清楚了您要做什么。 您需要先将xls文件上传到服务器位置,然后才能将服务器上文件的路径传递到连接字符串中。

例如

string filename = Path.GetFileName(FileUploadControl.FileName);
string path = Server.MapPath("~/") + filename;
FileUploadControl.SaveAs(path);

string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0;";
...

该文件实际上不存在于服务器磁盘上,除非将其保存在某个位置。 请参阅MSDN文档中的FileUpload.SaveAs方法 您手动指定的路径起作用的唯一原因是该应用程序位于开发人员机器上,因此可以访问该文件。 实际上,您对硬编码路径所做的就是完全通过完全上载控件。

string path = Path.Combine(@"C:\MyUploadDirectory", FileUploadControl.FileName);
FileUploadControl.SaveAs(path);
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0;"; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM