Tänkte jag skulle testa att använda mig utav parametrar när jag skall hämta data från min databas men jag får det inte att fugnera.
Har följande kod:
public DataSet ListUser(string strUsername){
string SQLStmt = "SELECT id From Users Where username = @Username";
OdbcCommand myCommand = new OdbcCommand(SQLStmt,objConn);
OdbcParameter paramUsername = new OdbcParameter("@Username", OdbcType.VarChar);
paramUsername.Value = strUsername;
myCommand.Parameters.Add(paramUsername);
return GetDataSet(myCommand);
}
Problemet är att det att jag inte får ut nån data när jag testar koden, men om jag ändrar SELECT id From Users Where username = @Username till SELECT id From Users Where username = '" + strUsername + "' så fungerar det.
Hm, ett frågetecken!? Nä, det kan inte stämma, det ska vara ett @ framför namnet. Frågetecken är väl i sql det samma som "allt", dvs du hämtar alla users och din parameter används inte över huvudtaget. Det ska i alla fall vara ett @ framför, det är jag ganska säker på och det fungerar för mig.
DavidB ... gör du lite större applicationer verkar din kod ganska omständig. Skapa en dataklass och lägg där in funktioner för att Returnera dataset med hjälp av sql-stringen och funktioner för att lägga till Parametrar.
Walker:
Det är bara kod som jag använder när jag testar om det fugnerar, skall hämta mer sen när jag skall använda koden.
P:
Har en databasklass som sköter det, GetDataSet(); är en sådan. Har även en för datareader och ExecuteNonQuery. LÄste i tråden om databashantering och där stog det att man skulle använda lager och det har jag gjort fast istället för att skicka en sträng med SQL frågan så skickar jag ett OdbcCommand.
Sen på tal om lager:
Jag har nu 3 lager.
1. Presentation
2. Ett lager där jag "tillverkar" alla SQL frågor.
3. Databasklasserna
I tråden om databashantering läste jag att vissa använde sig av 4 lager, jag testade detta men jag fattade inte riktigt vad Business lagret är till för?
När jag använde mig av den "modellen" så kändes detta lager onödigt så jag tog bort det.
Business lagret skall vara till för att kontrollera den datan som du stoppar in, tex så att ett datum ligger före ett annat, att en sträng har ett visst format också vidare. Kort sagt alla kontroller som du kan behöva. Behöver man inte så tar man bort det :)
trodde att det körde både client och server validering.
Jo, det stämmer. Har klienten javascript avslaget så validerar den automatiskt på servern.
Men sen har man ju ofta andra typer av valideringar... exempelvis ett telefonnummer som kan skrivas in på en mängd olika sätt men som måste se ut på ett visst sett inne i din applikation. Här kanske du inte vill tvinga användaren att skriva telefonnumret på ett visst sätt utan låta han använda bindestreck, mellanslag, riktnumemr och annat hur han vill och att du sedan bakom i ditt affärlager tar hand om formateringen utan att användaren behöver tänka på det!
Sedan har du ju ofta valideringar mellan klasser, så att du aldrig skickar in fel data mellan klasser och funktioner som kan krascha applikationen.
okej, men säg då att jag har ett Buisnesslager och jag skall lägga t ex två datum i databsen och då skall kolla som Walker skrev att ett datum ligger före ett annat, hur skall jag då skicka tillbaka data om att så inte är fallet?
Vill ju helst ha det utskrivet på sidan som de andra validatorerna och då tycker jag det verkar smidigast med CustomValidator?
Sen som NETwork sa att man inte skall tvinga användaren att skriva i ett visst format utan formatera det efter som man vill ha det. Funderade lite på det och kom fram till att jag inte har så månge sådana saker som skall skrivas om, e det itne lika bra att lägga detta i presentationslagret då?
har inte så mycket erfarenhet av asp.net än, utan håller mest på med windows applikationer, så tänk på det :r Så detta bli egentligen inte ett svar på din fråga..
men så här har jag gjort i mina bl klasser.
I varje set properties så kontrollerar jag om det är ett korrekt värde som sätts. Om det är två datum så får jag kolla först om det tidigaste datumet är satt när det andra datumet sätts. Skulle det gå fel så kastar jag ett exceptions, eller skapar en event som heter OnError, som visar vilket fält det var som var fel som jag sen kan stoppa in till min errorprovider.
Denna exception eller händelsen fångar jag i gränssnittet som sedan hanterar det, i detta fall en errorprovider. händelsen skapas i bl och fångas sen av det lagret som kan hantera, visa felet.
Ser inget problem med det..
Som en parantes, jag har en klass som ligger mella guit och bl som jobbar som controller, controllern matar guit med data då det har skett några uppdateringar, fel osv..
Jag undrar om det är nån som vet hur man kan sätta en max antal tecken tillsammans med TextBoxMode.MultiLine? Det fungerar ju inte att ha Maxlength tillsammans med en MultiLine.
134 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe