我目前正在製作ASP.NET MVC應用程序,供用戶將其他用戶從csv和excel上傳到數據庫。 在處理csv-uploader方法時,我遇到了一個問題:TextFieldParser - csvReader只讀取第一個列名,然後繼續嘗試將它添加到DataTable中的每一列,因此它給出了「DuplicateNameException in System.Data.dll中」。 而且我試圖找到一個計數器來幫助解決這個問題,而且我還更改了分隔符類型,導致每列停留在第一個DataTable列中,這意味着分隔符不是問題。 並且有一個斷點,所以我可以看到colFields計數器管理查找csv文件中的所有列,儘管它只嘗試將第一個列添加到DataTable。爲什麼我得到一個DuplicateNameException?
當我搜索這個問題時,唯一遇到的問題是當有故意的代碼嘗試和反覆實施同一列時,但我不認爲我有這樣的事情。
該方法只是停止嘗試添加下一列,並嘗試添加相同的第一個來代替。 因此有「DuplicateNameException」, 任何人都可以看到這是爲什麼?
這裏是我的代碼,並將其放置在一個控制器:
[HttpPost]
public ActionResult Import(HttpPostedFileBase file)
{
DataTable csvData = new DataTable();
if (file != null && file.ContentLength > 0)
{
try
{
using (TextFieldParser csvReader = new TextFieldParser(file.InputStream))
{
//TODO:Skapa en lista eller liknande för delimiter val om möjligt.
csvReader.SetDelimiters(new string[] { ";" });
csvReader.HasFieldsEnclosedInQuotes = false;
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
//TODO:Nuvarande error: DuplicateNameException, den lägger Author title på två olika kolumner och ger exception när detta upptäcks.
DataColumn Titel = new DataColumn(column);
Titel.AllowDBNull = true;
csvData.Columns.Add(Titel);
DataColumn FirstName = new DataColumn(column);
FirstName.AllowDBNull = true;
csvData.Columns.Add(FirstName);
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);
}
}
//Fortfarande i try...
SqlConnectionStringBuilder cb = new SqlConnectionStringBuilder();
cb.DataSource="HELMER/SQLEXPRESS";
cb.InitialCatalog="TestDB";
cb.IntegratedSecurity=true;
SqlConnection cnn = new SqlConnection(cb.ConnectionString);
SqlCommand cmd = new SqlCommand("SELECT * FROM csvData", cnn);
cnn.Open();
SqlDataReader rdr=cmd.ExecuteReader();
SqlBulkCopy sbc= new SqlBulkCopy("server=.;database=TestDB;" + "Integrated Security=SSPI");
sbc.DestinationTableName = "Users";
sbc.WriteToServer(rdr);
sbc.Close();
rdr.Close();
cnn.Close();
}
catch (Exception ex)
{
}
}
return RedirectToAction("Index", "Home", new { Message = "The Import was a success" });
}
我已經採取了一些源材料從該網站:
http://www.morgantechspace.com/2013/10/import-csv-file-into-sql-server-using.html
而且還我仍然很新的這個網站,雖然它已經有一週了,如果有什麼我做錯了。
從MSDN'當DataSet中的添加操作過程中遇到重複的數據庫對象名稱 - 相關object' – 2014-10-07 11:06:51
是的,我知道這意味着什麼,而不是我爲什麼在這種情況下,明白了嗎? – 2014-10-07 11:08:22
@ E.A.O.S'column'包含什麼? – 2014-10-07 11:14:33