我目前正在開發一個ASP.NET MVC項目,用戶可以在其中插入csv和excel記錄到數據庫中並在之後進行編輯。我已經完成了excel部分,並且工作出色。但另一方面,我的csv版本甚至無法設置csv文件路徑,它總是返回null。我嘗試過不同的方法,但似乎沒有任何工作。爲什麼我的csv文件路徑總是返回null?
我的願望是保持excel版本和csv版本類似,所以我使用了httpPost,但由於某些原因,它無法獲取csv文件路徑。 有人可以看到我做錯了什麼嗎?
這是應該發送的文件路徑我家的控制器觀點:
@{
ViewBag.Title = "Index";
}
<h1>Index</h1>
@using (Html.BeginForm("Import", "CSVImport", FormMethod.Post, new {enctype="multipart/form-data" }))
{
@Html.ValidationSummary(true)
<fieldset>
Select a file <input type="file" name="file" />
<input type="submit" value="Upload CSV" />
</fieldset>
}
這這裏是我的CSV進口商:
using System.Data.Common;
using System.Text;
using System.Data.ProviderBase;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Data.Sql;
using Microsoft.VisualBasic.FileIO;
namespace BFProj2.Controllers
{
public class CSVImportController : Controller
{
// GET: CSVImport
//public static DataTable GetDataTabletFromCSVFile(string csv_file_path)
[HttpPost]
public ActionResult Import(HttpPostedFileBase csv_file_path)
{
DataTable csvData = new DataTable();
if (csv_file_path != null && Request.Files["csv_file_path"].ContentLength > 0)
{
try
{
using (TextFieldParser csvReader = new TextFieldParser(csv_file_path.InputStream))
{
//Solution to HDR problem: When getting to the checkbox part of the application, just keep the HDR unchecked.
csvReader.SetDelimiters(new string[] { "," });
//Can be true depending on if the csv document rows are enclosed in quotes or not. Delimiters are set as either ; or , depending on weather the csv columns are split with ; or ,
csvReader.HasFieldsEnclosedInQuotes = false;
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
DataColumn Titel = new DataColumn(column);
Titel.AllowDBNull = true;
csvData.Columns.Add(Titel);
DataColumn LastName = new DataColumn(column);
LastName.AllowDBNull = true;
csvData.Columns.Add(LastName);
DataColumn AbstrNum = new DataColumn(column);
AbstrNum.AllowDBNull = true;
csvData.Columns.Add(AbstrNum);
DataColumn PosterTitel = new DataColumn(column);
PosterTitel.AllowDBNull = true;
csvData.Columns.Add(PosterTitel);
DataColumn Workshop = new DataColumn(column);
Workshop.AllowDBNull = true;
csvData.Columns.Add(Workshop);
DataColumn Keywords = new DataColumn(column);
Keywords.AllowDBNull = true;
csvData.Columns.Add(Keywords);
DataColumn Institution = new DataColumn(column);
Institution.AllowDBNull = true;
csvData.Columns.Add(Institution);
DataColumn CollabEmail = new DataColumn(column);
CollabEmail.AllowDBNull = true;
csvData.Columns.Add(CollabEmail);
}
while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
//Making empty value as null
for (int i = 0; i < fieldData.Length; i++)
{
if (fieldData[i] == "")
{
fieldData[i] = null;
}
}
csvData.Rows.Add(fieldData);
}
csvData = System.Data.Common.DbProviderFactories.GetFactoryClasses();
ViewData.Model = csvData.AsEnumerable();
}
}
catch (Exception ex)
{
}
}
return View();
}
}
}
我花了一些素材從這個: http://www.morgantechspace.com/2013/10/import-csv-file-into-sql-server-using.html
我還沒有放入大容量複製部分,它只是一個DataTable,但我想讓它這樣做再次返回homecontroller視圖之前,控制器中的所有內容,而不是放置在其他地方。
順便說一句,我是相當新的stackoverflow,所以如果有別的事情我做錯了問題相關的問我問需要指示,以改變它。
歡迎所以。我可能讀到這個錯誤,但是應該將你的''命名爲'csv_file_path'而不是'file'? – Rhumborl 2014-10-03 08:50:04
啊,謝謝。你是對的,可能會有些盲目的代碼,所以如果我把csv_file_path改成文件,它會識別文件路徑? – 2014-10-03 08:58:38
它沒有工作。文件路徑仍然返回null。 – 2014-10-03 09:01:03