0

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;
        }
    }
}
4

3 に答える 3

1

ファイルをどこかに保存するまで、ファイルは実際にはサーバーディスクに存在しません。FileUpload.SaveAsメソッドのMSDNドキュメントを参照してください。手動で指定したパスが機能している唯一の理由は、アプリが開発マシン上にあり、ファイルにアクセスできるためです。実際、ハードコードされたパスで行っているのは、アップロードコントロールを完全に無効にすることです。

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;"; 
于 2012-05-09T16:01:13.593 に答える
1

FileUploadコントロールはサーバー側のコントロールであり、コードは

Path.GetFullPath(FileUploadControl.FileName); 

クライアント側ではなく、サーバー上で実行されます。「ユーザーが自分のコンピューター上のさまざまな宛先からアップロードできるように、パスを動的にする必要がある」とはどういう意味かわかりません。ユーザーは、コンピューター上の任意の宛先からいつでもファイルを選択できます。

于 2012-05-09T15:49:59.283 に答える
1

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;";
...
于 2012-05-09T15:52:56.380 に答える