0

ここで、ユーザーがそこのシステムから Excel ファイルを参照すると、データが SQL データベース テーブルにアップロードされます。

次のコードでこのエラーが発生します: Microsoft Jet データベース エンジンは、オブジェクト 'C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Student Registration1.xls' を見つけることができませんでした。オブジェクトが存在すること、およびその名前とパス名のつづりが正しいことを確認してください。

なぜこの Path を求めているのかわかりませんか? C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\

protected void import_xls_Click(object sender, EventArgs e)
    {
        try
        {
            if (xmlupload.HasFile)
            {
                string path = xmlupload.PostedFile.FileName;


                string excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";

                OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
                excelConnection.Open();

                OleDbCommand cmd = new OleDbCommand("select * from [Sheet2$]", excelConnection);                    
                OleDbDataReader dReader = cmd.ExecuteReader();

                SqlBulkCopy sqlBulk = new SqlBulkCopy(SqlConnectionstring.mainConnectionString, SqlBulkCopyOptions.KeepIdentity);

                sqlBulk.DestinationTableName = "dbo.studentA";                    
                sqlBulk.ColumnMappings.Add("UserName", "UserName");
                sqlBulk.ColumnMappings.Add("Password", "Password");
                sqlBulk.ColumnMappings.Add("Name", "Name");
                sqlBulk.ColumnMappings.Add("Standard", "Standard");
                sqlBulk.ColumnMappings.Add("Division", "Division");
                sqlBulk.ColumnMappings.Add("SchoolName", "SchoolName");
                sqlBulk.ColumnMappings.Add("Language", "Language");
                sqlBulk.ColumnMappings.Add("ExamStatus", "ExamStatus");
                sqlBulk.ColumnMappings.Add("Result", "Result");                   

                sqlBulk.WriteToServer(dReader);

                lblmsg.Visible = true;
                lblmsg.Text = "Your data uploaded successfully";
                excelConnection.Close();
            }
        }
        catch (Exception ex)
        {
            lblmsg.Visible = true;
            lblmsg.Text = ex.Message.ToString();

        }

SqlConnectionstring.cs :

public class SqlConnectionstring
{
public SqlConnectionstring()
{
    //
    // TODO: Add constructor logic here
    //
}


public static readonly string mainConnectionString = ConfigurationManager.ConnectionStrings["constring"].ToString();
}
4

1 に答える 1

3

ファイルを作業ディレクトリに保存してから、そこから開いてみます。 fileName にパスがない場合、現在のディレクトリ (通常はプログラムの開始場所)
にある場合にのみ、接続はファイルを見つけることができます。

string savePath = @"c:\temp\uploads";

if (xmlupload.HasFile)
{
  string fileName = xmlupload.FileName;
  savePath = Path.Combine(savePath, fileName);
  xmlupload.SaveAs(savePath);
  string excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
                      savePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";   

  ....

Web サーバーでは、アクセス許可の問題を回避するために、サイトのルート フォルダーのサブフォルダーにファイルを保存することをお勧めします。

この場合、フォルダーはHttpServerUtility.MapMathメソッドを使用して完全修飾できます。

于 2012-08-11T21:07:05.007 に答える