Jag har två listboxar en med all tillgängl post samt den andra dit man kan
föra över ifrån den första.
Jag vill dock inte ha några dubbleter.
Detta sättet fungerade innan jag la till databasoperationer men inte nu
längre. Hur kan jag förbättra koden? :stud
itemText = ListBox1.SelectedItem.Text;
ListItem lstitem = ListBox2.Items.FindByValue(itemText);
if (lstitem != null)
{
Label2.Text = "Tjänsten finn redan.";
}
else
{
int anvId = Convert.ToInt32(ViewState["klientId"]);
sql = String.Format("INSERT INTO t_anstTjanst (anId,tjanst)
VALUES ('{0}','{1}');", anvId, itemText);
Webbutill.executeSQL(sql, DBConn);
DBConn.Close();
sql = String.Format("SELECT id, tjanst FROM t_anstTjanst
WHERE anId ={0};", anvId);
AccessDataSource4.SelectCommand = sql;
AccessDataSource4.DataBind();
ListBox2.Items.Add(itemText);
Label2.Text = "";
}
Att ta bort tecken är inte rätt väg att gå :) se istället till att det blir säkert att stoppa in valfritt tecken. Parametriserade frågor. Sök här på forumet.
Du kan inte ha dr som datakälla i en while-loop, du kommer att skriva över tidigare rader hela tiden. Använd metoden add eller insert som du kommenterat bort, funkar inte det?
...eller något sånt? Du vill ju inte att den söka efter poster där forId='idforId'
Dessutom, om du använder en annan databasfråga för att plocka detta värde så är det rimligt att du borde kunna slå ihop frågorna med en join, men du kanske använder DataTable:n till annat också?
Nu fungerar det tack för att ni har varit tålbodiga med mig. Jag har dock inte
fattat varför jag skall göra på det här sättet. Är det säkrare, snabbare,
stabilare eller?
För att jag skall förstå bättre, skall jag ha med alla fälten eller bara de som
är med i "WHERE"-satsen?
Vid en uppdate och insert så förstör jag att alla bör vara med, men hur blir
det då med "SQL-injektion" behöver jag inte köra med min replace-funktion?
För att jag skall förstå bättre, skall jag ha med alla fälten eller bara de som
är med i "WHERE"-satsen?
Alla värden som kommer "utifrån". Om en SQL-sats tidigare så ut så här:
string sql = "UPDATE tabell set kolumn=" + värde + " WHERE annankolumn=1 AND tredjekolumn=" + annatvärde
..så ska den nu se ut så här:
string sql = "UPDATE tabell set kolumn=? WHERE annankolumn=1 AND tredjekolumn=?"
Vid en uppdate och insert så förstör jag att alla bör vara med, men hur blir
det då med "SQL-injektion" behöver jag inte köra med min replace-funktion?
Du ska inte använda replace-funktionen. Det sköts automatiskt och du behöver inte bry dig om farliga tecken.