04. marts 2005 - 08:23Der er
21 kommentarer og 1 løsning
Tjekke, om brugernavnet eksisterer
Hejsa,
Jeg har en applikation i Visual Studio .NET, som er kode i C#, hvor der i første omgang skal indtastes et brugernavn - inden applikationen så går i gang, skal der tjekkes på, om brugernavnet er at finde i databasen - hvis det ikke er, skal der fremkomme en meddelelse om dette. Men jeg kan simpelthen ikke finde ud af det. Jeg har lavet en stored procedure ---> CREATE PROCEDURE dbo.FindBruger
@parmBruger varchar(8)
AS
Select AcctName from dbo.Account where AcctName = @parmBruger; GO
Og så ville jeg i koden spørge på, om den har fundet den eller ej, men jeg kan simpelthen ikke finde ud af det. I koden står sådan her:
SqlParameter[]parm = new SqlParameter[1];
parm[0] = new SqlParameter("@parmBruger", brugernavn); SqlHelper.ExecuteNonQuery(AppSettings.getConnString,CommandType.StoredProcedure,"FindBruger", parm);
Men så ved jeg ikke lige mere, hvad jeg skal gøre.
Lidt forvirrende - jeg ved det :-) Men håber, der er en, der kan hjælpe.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Du skal samle det op din SP returnere, du har jo lagt en SELECT ind i din SP. Du kunne samle den op i en string, noget ala dette:
string User = "";
SqlParameter[]parm = new SqlParameter[1];
parm[0] = new SqlParameter("@parmBruger", brugernavn); User = Convert.ToString(SqlHelper.ExecuteScalar(AppSettings.getConnString,CommandType.StoredProcedure,"FindBruger", parm));
Jeg vil gerne have den til udskrive en fejlmeddelelse, hvis der ikke er noget i stregen. Det, du skriver, gør jo ikke sådan. Den gemmer jo bare brugeren ned, og det har jeg ikke brug for.
Du er jo nød til at sammenligne med noget, det du får tilbage vil enten være "AcctName" fra din table, eller et -1. Så skal du bare lade en if sætning, som tester om det du fik tilbage er forskelligt fra -1, og en tom string(""). Så kan du udskrive din fejlmeddelse.
SqlCommand cmdUser = new SqlCommand("EXEC FindBruger "+ brugernavn, AppSettings.getConnString);
string User = Convert.ToString(cmdUser.ExecuteScalar());
if(User == "-1" || User == "") { MessageBox.Show("Brugeren blev ikke fundet"); }
Dette er lavet på en lidt anden måde, her bruges et almindeligt SqlCommand objekt, til at execute din SP inde på din database. Dette er IKKE en korrekt løsning, men den burde give dig en idé om det hele....
parm[0] = new SqlParameter("@parmBruger", brugernavn); User = Convert.ToString(SqlHelper.ExecuteNonQuery(AppSettings.getConnString,CommandType.StoredProcedure,"FindBruger", parm));
if(User == "-1" || User == "") { Label13.Text =("Brugeren blev ikke fundet"); }
Men selvom jeg indtaster et brugernavn, der ER i databasen, så melder den, at den ikke findes.
Hvad mener du ? Jeg har bare det her --> User = Convert.ToString(SqlHelper.ExecuteNonQuery(AppSettings.getConnString,CommandType.StoredProcedure,"FindBruger", parm));
Andet skal der ikke til. Altså, jeg har en stor applikation og det hele virker fint - jeg mangler bare det med at finde ud af, om brugernavnet eksisterer. Indtil nu har jeg bare gået ud fra, at brugernavnet er indtastet korrekt.
Jeg har lige prøvet at teste det lidt, og selvom jeg indtaster et brugernavn, der findes, bliver der stadig gemt '-1' ned i variablen - hvordan kan det være ?
SqlConnection con = new SqlConnection(AppSettings.getConnString);
SqlCommand cmdUser = new SqlCommand("EXEC FindBruger 'Neger'", con);
con.Open(); string User = Convert.ToString(cmdUser.ExecuteScalar()); con.Close();
if(User == "-1" || User == "") { MessageBox.Show("LORT!"); }
Der hvor der står neger, skal du bare have lagt din variabel ind, som indeholder det brugernavn som folk har indtastet. (SqlCommand cmdUser = new SqlCommand("EXEC FindBruger '"+ VARIABLENAVN +"'", con);)
Jeg har oprettet en SP som matcher din, og en tabel som hedder det samme som ved dig.
Men husk at dette er langt fra en perfekt løsning, du kan prøve om du kan omsætte det til noget som minder om dit, hvis du gerne vil bruge det sammen med parameter...
linemus83>> dit problem har altiv været at du bruge ExecuteNonQuery igennem Microsoft Application Block.
ExecuteNonQuery = en sql statement der ikke VÆLGER noget i databasen, altså en Insert eller Update, returnerer et tal på hvor mange rows der blev affected af ens statement ExecuteScalar = en statement der returnerer ET felt (der af navnet scalar). ExecuteDataReader = en statement der returnerer en reader så at man kan løbe igennem en eller flere poster.
I dit tilfælde returnerer du et felt, AcctName, og skal derfor bruge ExecuteScalar og caste objectet du får retur til en string - som the_party_dog så fint har vist.
så hvis der skal være lidt konsistens i din kode bliver det til noget i retningen af
SqlParameter[]parm = new SqlParameter[1];
parm[0] = new SqlParameter("@parmBruger", brugernavn); String user = (string)SqlHelper.ExecuteScalar(AppSettings.getConnString,CommandType.StoredProcedure,"FindBruger", parm);
if(user == "-1" || user == "") { MessageBox.Show("LORT!"); }
cyberfessor > Jeg takker for den lille ros du har givet mig, er ikke den store haj til noget af dette endnu. Men at høre sådan en lille kommentar fra en af dem med meget viden, det varmer sgu :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.