Avatar billede linemus83 Nybegynder
04. marts 2005 - 08:23 Der 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.

Mvh Line
Avatar billede the_party_dog Nybegynder
04. marts 2005 - 08:27 #1
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));
Avatar billede the_party_dog Nybegynder
04. marts 2005 - 08:28 #2
Kan være du skal tilskrive de forskellige værdier på dit SqlCommand object på en anden måde :)
Avatar billede linemus83 Nybegynder
04. marts 2005 - 08:29 #3
Altså, jeg er ikke lige med på det, du skriver overhovedet.
Avatar billede linemus83 Nybegynder
04. marts 2005 - 08:30 #4
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.
Avatar billede the_party_dog Nybegynder
04. marts 2005 - 08:32 #5
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.
Avatar billede linemus83 Nybegynder
04. marts 2005 - 08:35 #6
Jeg kan ikke lige tænke så langt lige nu. Du kan vel ikke skrive det for mig? Så får du pointene.
Avatar billede the_party_dog Nybegynder
04. marts 2005 - 08:40 #7
SIMPELT LAVET:

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....
Avatar billede linemus83 Nybegynder
04. marts 2005 - 08:46 #8
Jeg har skrevet sådan:

    string User = "";
           

                SqlParameter[]parm = new SqlParameter[1];

                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.
Avatar billede the_party_dog Nybegynder
04. marts 2005 - 08:46 #9
Vent... Du skal have et connection objekt.

SqlConnection con = new SqlConnection(AppSettings.getConnString);

SqlCommand cmdUser = new SqlCommand("EXEC FindBruger "+ brugernavn, con);

con.Open();
string User = Convert.ToString(cmdUser.ExecuteScalar());
con.Close();

if(User == "-1" || User == "")
{
MessageBox.Show("Brugeren blev ikke fundet");
}
Avatar billede the_party_dog Nybegynder
04. marts 2005 - 08:47 #10
Husker du at åbne en forbindelse til din server?
Avatar billede linemus83 Nybegynder
04. marts 2005 - 08:49 #11
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.
Avatar billede linemus83 Nybegynder
04. marts 2005 - 08:52 #12
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 ?
Avatar billede the_party_dog Nybegynder
04. marts 2005 - 09:05 #13
Dette er testet op afprøvet som virkende:

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.
Avatar billede linemus83 Nybegynder
04. marts 2005 - 09:08 #14
Jeg har lige prøvet det, du lige skrev - der kommer stadig en fejlmeddelelse, når jeg indtaster noget, der findes i databasen.
Avatar billede linemus83 Nybegynder
04. marts 2005 - 09:10 #15
Nå, jeg glemte bare at sætte det sådan '"+ VARIABLENAVN +"'", - det virker - tak for det. Smid et svar ;-)
Avatar billede the_party_dog Nybegynder
04. marts 2005 - 09:10 #16
Det forstår jeg virkelig ikke...

Din "AppSettings.getConnString" indeholder din connnection streng til din database, ik?

Du skal huske at efter FindBruger, står Neger i appostrof ( ' )Neger ( ' ).
Avatar billede the_party_dog Nybegynder
04. marts 2005 - 09:11 #17
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...
Avatar billede Syska Mester
04. marts 2005 - 12:50 #18
Select Count(AcctName) from dbo.Account where AcctName = @parmBruger;

Så kommer der jo 1 hvis personen findes, og 0 hvis han ikke findes
Avatar billede segato Nybegynder
04. marts 2005 - 13:58 #19
Det er fordi han bruger Microsoft Application Block der genrere den en connection for ham.
Avatar billede burningice Nybegynder
05. marts 2005 - 09:53 #20
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!"); 
            }
Avatar billede the_party_dog Nybegynder
08. marts 2005 - 07:34 #21
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 :-)
Avatar billede burningice Nybegynder
09. marts 2005 - 00:17 #22
:) you're welcome
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester