Je suis actuellement en train d'utiliser un bouton pour insérer/mettre à jour du contenu dans une table. Il prend ensuite le fichier CSV téléchargé et l'insère ou le met à jour dans une table de données selon que la ligne existe ou non.C# Mise à jour des données Problème
Voici le code tiré après OnClick du bouton:
if (ExcelDDL.SelectedValue == "Time Points" && fileName == "TimePoints.csv")
{
var GetTPoints = (SEPTA_DS.TimePointsTBLDataTable)tpta.GetDataByCategory(CategoryDDL.SelectedItem.ToString());
//Loop through each row and insert into database
int i = 0;
foreach (DataRow row in TempRouteDataTable.Rows)
{
//Gather column headers
var category = Convert.ToString(CategoryDDL.SelectedItem);
var agency = Convert.ToString(row["Agency"]);
if (agency == null || agency == "")
{
//If row is empty skip it entirely
goto skipped;
}
var route = Convert.ToString(row["Route"]);
var GetRShortName = (SEPTA_DS.RoutesTBLDataTable)rta.GetDataByRouteID(route);
var newRoute = "";
if (GetRShortName.Rows.Count > 0)
{
newRoute = Convert.ToString(GetRShortName.Rows[0]["route_short_name"]);
}
var direction = Convert.ToString(row["Direction"]);
var serviceKey = Convert.ToString(row["Service Key"]);
var language = Convert.ToString(row["Language"]);
var stopID = Convert.ToString(row["Stop ID"]);
var stopName = Convert.ToString(row["Stop Name"]);
if (stopName.Contains("accessible"))
{
string[] noHTML = stopName.Split('>');
int insertH = Convert.ToInt32(hta.InsertHandicapRow(newRoute,noHTML[2]));
}
var sequence = Convert.ToString(row["Sequence"]);
var origID = -1;
if (GetTPoints.Rows.Count > 0)
{
origID = Convert.ToInt32(GetTPoints.Rows[i]["TPointsID"]);
var GetID = (SEPTA_DS.TimePointsTBLDataTable)tpta.GetDataByID(origID);
if (GetID.Rows.Count < 1)
{
origID = -1;
}
}
if (origID == -1)
{
int insertData = Convert.ToInt32(tpta.InsertTimePoints(category, agency, newRoute, direction, serviceKey, language, stopID, stopName, sequence));
}
else
{
int updateData = Convert.ToInt32(tpta.UpdateTimePoints(category, agency, newRoute, direction, serviceKey, language, stopID, stopName, sequence, origID));
}
skipped:
i++;
}
}
Vous pouvez voir comment je vérifie si vous souhaitez insérer ou mettre à jour autour du fond. J'utilise cette méthode dans d'autres sections de ce programme et cela fonctionne très bien. Mais dans ce cas, il déforme immensément ma base de données et je n'arrive pas à comprendre pourquoi.
Ceci est la partie inférieure de ma table après l'insertion [aucun élément actuellement au sein de la base de données]:
Ceci est la table après reuploading le CSV avec les données déjà existantes dans le tableau:
Je reçois également cette erreur lors de la mise à jour There is no row at position 2230.
Qu'est-ce qui ne va pas dans le code pour provoquer thi s énorme changement? Je vérifie juste pour voir si l'identification existe et si elle met à jour plutôt qu'insérer.
La raison pour laquelle j'utilise goto
est également parce qu'il y a des lignes vides dans le document qui doivent être ignorées.
Sur le 'goto': il peut être facilement enlevé si vous voulez. Faites simplement un cycle normal pour, comme il se doit (il y a des phases d'initialisation et d'incrémentation claires, et je suppose que 'Rows' est indexable) et utilisez le mot-clé' continue' pour ignorer une itération. –
ce serait aussi une bonne chose (tm) de changer cela: agency == null || agency == "" à ceci: string.IsNullOrEmpty (agence) si votre .net 4, vous pouvez utiliser string.IsNullOrWhitespace() –
@ Maud'Dib Merci c'est beaucoup mieux. – balexander