2012-06-29 119 views
2

我正在使用我发现的帖子中的示例。这似乎很适合我正在做的事情。 下面是代码来保存文件:上传Excel工作表并将数据导入SQL Server Express数据库

[HttpPost] 
public ActionResult FileUpload(HttpPostedFileBase excelFile) 
{ 
    //Save the uploaded file to the disc. 
    string savedFileName = "~/App_Data/uploads/";// +excelFile.FileName; 
    string filePath = Path.Combine(savedFileName, excelFile.FileName); 
    excelFile.SaveAs(Server.MapPath(filePath)); 

    return View(); 
} 

这里是把数据导入到数据库表中的代码:

private void SaveFileToDatabase(string savedFileName) 
{ 
    String strConnection = "Data Source=.\\SQLEXPRESS;AttachDbFilename='catalog=QQAEntities'Integrated Security=SSPI;User Instance=True"; 
    String connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;", Server.MapPath(savedFileName)); 
    { 
    using (OleDbConnection connection = new OleDbConnection(connectionString)) 
    { 
     using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM [dbo_ts_quality_audit_tbl$]", connection)) 
     { 
      connection.Open(); 

      using (OleDbDataReader dReader = cmd.ExecuteReader()) 
      { 
      using (SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection)) 
      { 
       //Give your Destination table name 
       sqlBulk.DestinationTableName = "AuditSchedules"; 
       sqlBulk.WriteToServer(dReader); 
      } 
      } 
     } 
     } 
    } 
} 

private string GetLocalFilePath(string saveDirectory, FileUpload fileUploadControl) 
{ 
    //System.Web.UI.WebControls.WebControl 
    string filePath = Path.Combine(saveDirectory, fileUploadControl.FileName); 

    fileUploadControl.SaveAs(filePath); 

    return filePath; 
} 

下面是文件上传的观点:

<h2>FileUpload</h2> 

@using (Html.BeginForm("FileUpload", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
<input type="file" id="excelFile" name="excelFile" /> 
<input type="submit" value="Upload" /> 
} 

上传工作。我的问题是;如何在视图中调用数据传输(SaveFileToDatabase)?这将全部从管理部分完成。

另外我已经在配置数据库连接 - 我该如何清理这个?

谢谢

回答

1

该视图应获取文件信息,但将所有执行传递到控制器。内部控制器,你应该打电话给你SaveFileToDatabase功能,并通过它,你得救了,像这样的临时文件:

[HttpPost] 
public ActionResult FileUpload(HttpPostedFileBase excelFile) 
{ 
    //Save the uploaded file to the disc. 
    string savedFileName = "~/App_Data/uploads/";// +excelFile.FileName; 
    string filePath = Path.Combine(savedFileName, excelFile.FileName); 
    excelFile.SaveAs(Server.MapPath(filePath)); 

    // Call function to place temporary file into database 
    SaveFileToDatabase(filePath); 

    // Optional: Delete temporary Excel file from server 

    return View(); 
} 

(不要忘了考虑是否要坚持你的服务器上的临时Excel文件..如果没有,你需要照顾删除文件,一旦你知道处理已完成)

+0

它不喜欢StrConnection。没有一些方法来保证配置。连接已经在那里? –

+0

在代码片段中,您的StrConnection看起来并不完全有效。如果您在Web.config中定义了连接,则应该将该DbContext引用为实际的保存到SQL。 – Marshall

+0

我修复了它可以工作的字符串,但是我不相信那里有连接字符串是正确的。因此,如果我要对DBContext进行引用 - 那看起来怎么样? –

相关问题