В настоящее время я создаю приложение ASP.NET MVC для пользователей, чтобы загружать других пользователей в базу данных csv и excel. И, работая над методом csv-uploader, я столкнулся с проблемой, когда TextFieldParser - csvReader только считывает имя первого столбца, а затем перебирается, чтобы попытаться добавить его в каждый столбец в DataTable, и, таким образом, он дает «DuplicateNameException в 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 'когда повторяющееся имя объекта базы данных встречаются во время операции добавления в наборе данных о связанных object' –
Да, я знаю, что это значит, но не то, почему я получил его в этом случае? –
@ E.A.O.S что содержит 'column'? Столбец –