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...
11 svar · 460 visningar · startad av Smultron
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))
{
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...
mm ok
det ska jag testa
thx
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å?
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
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 :)
Självklart, om man är så observant att man läser vad för datakälla det rör sig om :)
Uhm.. Kod, Magnus eller renholm. Kod! :bire
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
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.
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
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...)