/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
[.Net,ODBC.Net,C#] RecordsAffected
Fra : Jesper Stocholm


Dato : 01-06-02 18:22

Jeg har lidt problemer med at forstå, hvordan RecordsAffected skal
opføre sig. Jeg har - selvsagt - en SQL-forespørgsel, hvor jeg gerne
vil checke på, om den resulterer i nogle rækker eller ej. Mit problem
er blot, at den kun vil give mig resultatet "-1" Hvis jeg læser
documentationen for Odbc.Net korrekt, så kræver anvendelsen
af .RecordsAffected, at OdbcDataReader er lukket ... men det ser ikke
ud til at hjælpe mig :(

Koden der henter data ud ser således ud:

void checkLogin() {
   dbOdbc oDB = new dbOdbc();
   string strSHA1Pswd = FormsAuthentication.HashPasswordForStoringInConfigFile(strPassword.Text, "SHA1");
   string strSQL = "SELECT UserName,Level FROM Table1 where UserName = '" + strUserName.Text + "' AND SHA1Pswd = '" + strSHA1Pswd + "'";
   OdbcDataReader oDataReader = oDB.getData(strSQL);
   if(oDataReader.IsClosed){
      isclosed.Text = "true";
      count.Text = oDataReader.RecordsAffected.ToString();
   }
   else
   {
      isclosed.Text = "false";
   }
}

.... der anvender klassen

public class dbOdbc : Page
{
   public OdbcDataReader getData(string strSQL) {
      OdbcConnection oCon;
       OdbcCommand oCmd = new OdbcCommand();
      oCon = new OdbcConnection("driver={MySQL};server=;uid=;pwd=;database=;OPTION=17923");
       oCon.Open();
      oCmd.Connection = oCon;
       oCmd.CommandText = strSQL;
      OdbcDataReader result = oCmd.ExecuteReader(CommandBehavior.CloseConnection);
       result.Close();
      oCon.Close();
       return result;
   }
}

Hvordan skal jeg lave min kode, så jeg har adgang til disse metoder ? Når
jeg bruger koden

   if(oDataReader.IsClosed){
      isclosed.Text = "true";
      count.Text = oDataReader.RecordsAffected.ToString();
   }
   else
   {
      isclosed.Text = "false";
   }

kan jeg jo se, at oDataReader er lukket ... men når jeg udskriver antallet
af rækker, så giver den mig stadig svaret "-1" [1]. Dette kan bla. ses ved
at prøve at logge ind med brugernavn "user" og password "user" på
http://admin.stocholm.dk, hvor jeg har oprettet en sådan bruger.

[1] Jeg kunne nu godt komme udenom dette på anden vis, men jeg er lidt
træt af, at jeg ikke kan få det til at virke, som jeg mener det burde :)

--
Jesper Stocholm
http://stocholm.dk
http://asp.stocholm.dk
Svar til gruppen og ikke til mig privat pr. email :|

 
 
Jakob Andersen (01-06-2002)
Kommentar
Fra : Jakob Andersen


Dato : 01-06-02 20:56

Jesper Stocholm wrote:
> Jeg har lidt problemer med at forstå, hvordan RecordsAffected skal
> opføre sig. Jeg har - selvsagt - en SQL-forespørgsel, hvor jeg gerne
> vil checke på, om den resulterer i nogle rækker eller ej.

Du har misforstået RecordsAffected på det skammeligste

RecordsAffected er lidt det samme som når du i query analyzer for at vide
hvor mange rækker den SQL du lige har fyret af har _ændret_ på, dvs. den kan
f.eks. fortælle dig hvormange poster en UPDATE statement har opdateret eller
hvor mange rækker du har indsat med en INSERT eller hvor mange rækker du har
slettet med en DELETE, men _ikke_ hvor mange der returneres med en SELECT.
Hvis du kigger i definitionen af RecordsEffected står der også følgende:

"Gets the number of rows changed, inserted, or deleted by execution of the
Transact-SQL statement."

Du kan faktisk ikke få antallet af poster i en datareader uden at løbe
igennem dette skyldes at denne er ADO.NET's udgave af et forward-only
recordset.

> Hvordan skal jeg lave min kode, så jeg har adgang til disse metoder ?
> Når jeg bruger koden

Du skal istedet bruge f.eks. et DataTable hvis du ønsker at tælle antallet
af rækker, her kan du så benytte Rows.Count

Hvis du vil lave din datareader om til et datatable skal du nok kigge på
GetSchemaTable metoden på DataReader objekte.

--
Jakob Andersen



Jesper Stocholm (01-06-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 01-06-02 22:13

Jakob Andersen wrote in news:adb8t1$e2q$1@sunsite.dk:

> Jesper Stocholm wrote:
>> Jeg har lidt problemer med at forstå, hvordan RecordsAffected skal
>> opføre sig. Jeg har - selvsagt - en SQL-forespørgsel, hvor jeg gerne
>> vil checke på, om den resulterer i nogle rækker eller ej.
>
> Du har misforstået RecordsAffected på det skammeligste

ja ... det kan jeg næsten forstå ... :)

> RecordsAffected er lidt det samme som når du i query analyzer for at
> vide hvor mange rækker den SQL du lige har fyret af har _ændret_ på,
> dvs. den kan f.eks. fortælle dig hvormange poster en UPDATE statement
> har opdateret eller hvor mange rækker du har indsat med en INSERT
> eller hvor mange rækker du har slettet med en DELETE, men _ikke_ hvor
> mange der returneres med en SELECT. Hvis du kigger i definitionen af
> RecordsEffected står der også følgende:
>
> "Gets the number of rows changed, inserted, or deleted by execution of
> the Transact-SQL statement."

ja ... jeg kan godt se det nu. I ODBC.Net referencen står der nemlig (som
jeg godt nok læste, men misforstod):

The number of rows changed, inserted, or deleted. -1 for SELECT statements;
0 if no rows were affected, or the statement failed.

:o|

Da jeg blot skulle bruge det til et login-script, så endte jeg med at lave
det som en COUNT(field) FROM ...

:)

--
Jesper Stocholm
http://stocholm.dk
http://asp.stocholm.dk
Svar til gruppen og ikke til mig privat pr. email :|

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste