Avatar billede radiv Nybegynder
18. november 2004 - 12:56 Der er 8 kommentarer og
1 løsning

Fill dataset hvis der er noget at læse

Min kode ser sådan ud:

minConnection.Open();
minSqlDataReader = minCommand.ExecuteReader();
DataSet ds = new DataSet();

while (minSqlDataReader.Read())
{
    minSqlDataAdapter.SelectCommand = minCommand;               
}
           
minSqlDataReader.Close();           
minConnection.Close();
minSqlDataAdapter.Fill(ds);

return ds;


Problemet opstår hvis der ikke er noget at læse, altså at sql-sætningen ikke returnerer nogle poster.
Hvordan kan jeg få minSqlDataAdapter.Fill(ds) til at eksekvere kun hvis der er nogle poster?
Avatar billede slash Nybegynder
18. november 2004 - 13:11 #1
umiddelbart ved at teste på: ds.Tables("mintabel").Rows.Count > 0
Avatar billede radiv Nybegynder
18. november 2004 - 13:25 #2
nej, for min sql-sætning er et join mellem flere tabeller, hvor der i hver enkelt altid vil være værdier. Desuden skal jeg først fylde datasettet hvis testen er sand.
Avatar billede slash Nybegynder
18. november 2004 - 13:35 #3
Jow - if minSqlDataReader.hasrows = true then
Avatar billede radiv Nybegynder
18. november 2004 - 13:51 #4
det kan jeg jo ikke, da jeg skal fylde datasettet etter at connection er closed, og jeg ikke kan læse med datareader når den er lukket.
Avatar billede slash Nybegynder
18. november 2004 - 13:57 #5
har du prøvet således: ?

minConnection.Open();
minSqlDataReader = minCommand.ExecuteReader();
if minSqlDataReader.Hasrows = True {
    DataSet ds = new DataSet();

    while (minSqlDataReader.Read())
    {
        minSqlDataAdapter.SelectCommand = minCommand;               
    }
           
    minSqlDataReader.Close();           
    minConnection.Close();
    minSqlDataAdapter.Fill(ds);
    return ds;
}
else {
  Response.write "HEST - no data!";
}

BTW: om min C# syntax er OK er ikke sikkert da jeg kun koder VB.NET!
Avatar billede radiv Nybegynder
18. november 2004 - 14:06 #6
Gør jeg sådan, funderer det:

minConnection.Open();
minSqlDataReader = minCommand.ExecuteReader();
DataSet ds = new DataSet();
if (minSqlDataReader.HasRows == true)
{     
  while (minSqlDataReader.Read())
  {
    minSqlDataAdapter.SelectCommand = minCommand;   
  }
   
  minSqlDataReader.Close();                   
  minConnection.Close();
  minSqlDataAdapter.Fill(ds);
  return ds;
  }

  else
  {
    minSqlDataReader.Close();                   
    minConnection.Close();
    minSqlDataAdapter.Fill(ds);
               
    return ds;
  }

Et par små syntaktiske ting, ellers er det ok.

Tak!
Avatar billede slash Nybegynder
18. november 2004 - 14:08 #7
PS: Hvorfor indkaplser du egentlig ikke din dbconnection i en try, catch, finally block?
Avatar billede radiv Nybegynder
18. november 2004 - 15:26 #8
det ville nok være en god ide...
Avatar billede burningice Nybegynder
22. november 2004 - 21:15 #9
er den her kode ikke lidt... ja, underlig... unødvendig

  while (minSqlDataReader.Read())
  {
    minSqlDataAdapter.SelectCommand = minCommand;   
  }

du tildelder vel den samme command x antal gange = spild af tid

jeg ville gøre det sådan her istedet:

minConnection.Open();
minSqlDataReader = minCommand.ExecuteReader();
DataSet ds = new DataSet();

if (minSqlDataReader.Read()) {

  minSqlDataAdapter.SelectCommand = minCommand;
 
  minSqlDataReader.Close();                   
  minConnection.Close();
  minSqlDataAdapter.Fill(ds);
  return ds;

} else {

  minSqlDataReader.Close();                   
  minConnection.Close();
  minSqlDataAdapter.Fill(ds);
               
  return ds;
}


Eller endnu bedre: drop readeren

DataSet ds = new DataSet();
minSqlDataAdapter.Fill(ds);

if (ds.Rows.Count > 0) {
  minSqlDataAdapter.SelectCommand = minCommand;
}

return ds;
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