webForumDet fria alternativet

problem med en enkel databaskoppling och if-sats

.NETur .NET

11 svar · 460 visningar · startad av Smultron

Medlem sedan juli 2002423 inlägg
Frågan#1

jag har gjort en login, men när den skall kolla om lösenordet är rätt blir det problem...
den säger att det inte är rätt lösenord, även om jag har rätt? vad är problemet??

		public void DoLogin(string sqlString, string password, string username)
		{
			SqlCommand command= new SqlCommand();
			command.CommandText= sqlString;
			command.Connection= new SqlConnection("Server=**;Database=**;Trusted_Connection=True;");			
			
			command.Connection.Open();

			SqlDataReader reader=command.ExecuteReader(CommandBehavior.Default);
			
			if(reader.HasRows) 
			{
				reader.Read();
				
					if(reader["password"].ToString().Equals(password))
					{

det är denna som det slutar fungera vid

					if(reader["password"].ToString().Equals(password))
					{
Medlem sedan jan. 2004501 inlägg
#2

En bättre lösning är att se ur många rader som din fråga returnerar....

Typ.

Selecta från databasen med satsen "WHERE username = @min var AND password = @minvar2

Fyll upp den i den ds och kolla sedan rowcount på tabellen som du fyller...

Medlem sedan juli 2002423 inlägg
#3

mm ok
det ska jag testa
thx

Medlem sedan juli 2002423 inlägg
#4

men får inte ds att funka?
Hur ska man göra den?

såhär?

			SqlConnection myConn= new SqlConnection("Server=**Database=**;Trusted_Connection=True;");			
			
			SqlDataAdapter sda= new SqlDataAdapter(sqlString, myConn);

			sda.TableMappings.Add("Users");
			DataSet ds= new DataSet();
			sda.Fill(ds, "Users");

men hur får jag ut antalet rows sen då?

Medlem sedan apr. 20012 266 inlägg
#5

Varför fylla ett DataSet?

Snabbare att använda en DataReader och använda funktionen Read() för att se om några rader retunerades.

if (IDataReader.Read())
   // lyckades
else
   // misslyckades
Medlem sedan maj 20012 812 inlägg
#6

En ännu bättre version är att använda sig av en SP som returnerar antalet rader där usernamn och password stämmer överens med de inmatade värden.

Sedan så skickar man inte tillbaka något recordset utan endast en parameter med resultatet. 0/1 vilket så fall kan vara en bit.

Och så plockar man ut det i .NET sedan, då slipper man blanda in readers, dataset osv osv och får på det sättet en så optimal prestanda lösning som möjligt

- Magnus

Ville bara glänsa lite med mina kunskaper :)

Medlem sedan apr. 20012 266 inlägg
#7

Självklart, om man är så observant att man läser vad för datakälla det rör sig om :)

Medlem sedan sep. 20026 425 inlägg
#8

Uhm.. Kod, Magnus eller renholm. Kod! :bire

Medlem sedan jan. 2004501 inlägg
#9

renholm: En anledning till att fylla ett dataSet eller en dataTable är att man sedan kan läsa ut userID och annan information som man vill köra in login-session. Bara en tanke.

Du får ut antal rader genom att skriva så här.

ds["tabellnamn"].Rows.Count

Medlem sedan apr. 20012 266 inlägg
#10

asmodie skrev:

renholm: En anledning till att fylla ett dataSet eller en dataTable är att man sedan kan läsa ut userID och annan information som man vill köra in login-session. Bara en tanke.

Du får ut antal rader genom att skriva så här.

ds["tabellnamn"].Rows.Count

Vilket du även gör med en reader :) Det som skilljer dem åt är att DataSet:et ligger i minnet medan en IDataReader läser direkt och inget lagras i minnet såvida du inte vill det.

Uhm.. Kod, Magnus eller renholm. Kod!

Självklart, vet dock inte om detta blir rätt :)

SqlConnection connection = new SqlConnection(connectionstring);
try
{
	connection.Open();
	SqlCommand command = new SqlCommand();

	command.Parameters.Add(new SqlParameter("@output", SqlDbType.Int, 4))
	command.Parameters["@output"].Direction = ParameterDirection.Output;
	command.ExecuteNonQuery();

	int mittvarde = (int)command.Parameters["@output"].Value;
}
finally
{
	connection.Close();
}

Ungefär :) Fick klippa ihop lite kod från mitt datalager.

Medlem sedan maj 20012 812 inlägg
#11

Självklart, om man är så observant att man läser vad för datakälla det rör sig om

Jag vet, man är för slarvig och orkar oftas inte läsa allt, och så gör man en massa antagande som oftast inte passar riktigt in i situationen :)

Men visst är det en snygg lösning. Framför allt snabb.

- Magnus

Medlem sedan maj 20012 812 inlägg
#12

Uhm.. Kod, Magnus eller renholm. Kod!

Sådan petiteser, får man ju lösa själv.

Jag är ju bara här för att berätta hur en helthetslösning är. Små detaljer som kod det struntar vi i... :)

Och komihåg skulle er kod inte fungera så är det bara att skriva 42. Så är det löst...

- Magnus (som borde gå och lägga sig...)

137 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)