Avatar billede dj_uncas Nybegynder
07. februar 2005 - 16:04 Der er 34 kommentarer og
1 løsning

løkke i database forb.

Hejsa
Jeg har lavet en forbindelse til min Access db og vil gerne prøve at køre en løkke der skal udsrkive inholdet i en tabel en masse gange.
Jeg har prøvet noget i stil med dette:
for (counter = 1; counter < 1000; counter ++)
{
//en masse db kode
//en Datagrid.Databind() ting
}

Problemet er at den kun udskriver mit datagrid en gang! Hvad skal man gøre ved det?
Avatar billede arne_v Ekspert
07. februar 2005 - 16:09 #1
Skal det ind i et datagrid eller ?
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 16:18 #2
altså mit mål er i sidste ende at kunne måle forskellen på forbindelse til Access og MySQL, både med old ASP og .NET. Med old ASP lavede jeg bare <løkke>Response.Write rs("text") </løkke>, så jeg tænkte at man måtte skulle lave noget tilsvarende m. .NET.
Hvis du har andre forslag til at nå mit mål er jeg villig til at lytte :)
Avatar billede arne_v Ekspert
07. februar 2005 - 16:22 #3
Hvad med en data reader ?
Avatar billede arne_v Ekspert
07. februar 2005 - 16:24 #4
<%
        Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.mdb;User Id=admin;Password=")
        con.Open
        Dim cmd As OleDbCommand = New OleDbCommand ("SELECT felt FROM tabel", con)
        Dim rdr As OleDbDataReader = cmd.ExecuteReader
        While rdr.Read
            Dim f As String = CType(rdr(0), String)
            Response.Write f
        End While
        con.Close
%>
Avatar billede arne_v Ekspert
07. februar 2005 - 16:24 #5
Det er ikke pæn ASP.NET kode, men det ligner nok din ASP kode mest i koncept !
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 16:39 #6
hmm, ja det har du nok ret i! Mht til User Id i OleDbConnection, det kender jeg ikke noget til. Der plejer ikke at være UserId og password på mine access db's.?
Avatar billede arne_v Ekspert
07. februar 2005 - 16:43 #7
Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.mdb;User Id=admin;Password=")
Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.mdb;User Id=;Password=")
Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.mdb;")

hvad der nu virker
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 17:12 #8
Det virker sgu ikke helt. Der er noget med at OleDbConnection ikke er defineret.
Du skulle vel aldrig have noget c#? Det er jeg bedst til at forstå, og desuden er ideen at vise den kompilerede kodes hastighed ift. alm ASP.
Avatar billede arne_v Ekspert
07. februar 2005 - 18:27 #9
<%
        OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Test.mdb");
        con.Open();
        OleDbCommand cmd = new OleDbCommand("SELECT felt FROM tabel", con);
        OleDbDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            string f = (string)rdr[0];
            Response.Write(f);
        }
        con.Close();
%>
Avatar billede arne_v Ekspert
07. februar 2005 - 18:28 #10
Du skal naturligvis importere namespace System.Data.OleDb

<%@ import namespace="System.Data.OleDb" %>
Avatar billede arne_v Ekspert
07. februar 2005 - 18:29 #11
Og VB.NET og C# kompileres helt på samme måde i ASP.NET !
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 19:04 #12
Ok, men hvordan laver man så løkken? Så vidt jeg kan se (og det er ikke meget når det er VB) er der ikke nogen i dit eksempel?
Avatar billede arne_v Ekspert
07. februar 2005 - 19:07 #13
18:27:54 er altså C#
Avatar billede arne_v Ekspert
07. februar 2005 - 19:07 #14
<%
  OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Test.mdb");
  con.Open();
  for(int i = 0; i < 1000; i++)
  {
        OleDbCommand cmd = new OleDbCommand("SELECT felt FROM tabel", con);
        OleDbDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            string f = (string)rdr[0];
            Response.Write(f);
        }
  }
  con.Close();
%>
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 19:18 #15
nå nå, jeg er vist trættere end jeg troede.. Hmm, undskyld, men jeg kom vist til at se lidt meget Super Bowl i går.
Nå! Fejl:
Compiler Error Message: BC30684: 'OleDbConnection' is a type and cannot be used as an expression.
Er det mig der gør noget galt? Virker det hos dig?
Avatar billede arne_v Ekspert
07. februar 2005 - 19:20 #16
Det er klippet ud af fungerende kode.

Har du angivet at sproget er C# ?
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 19:28 #17
Nå har jeg rodet lidt rundt, og får nu en anden fejl: http://aoa.dk/sso/test.aspx

En anden ting: hvorfor bruger du egentlig <% %>? Det troede jeg slet ikke man brugte i .NET!
Avatar billede arne_v Ekspert
07. februar 2005 - 19:31 #18
Data readeren skal lige lukkes:

<%
  OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Test.mdb");
  con.Open();
  for(int i = 0; i < 1000; i++)
  {
        OleDbCommand cmd = new OleDbCommand("SELECT felt FROM tabel", con);
        OleDbDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            string f = (string)rdr[0];
            Response.Write(f);
        }
        rdr.Close();
  }
  con.Close();
%>
Avatar billede arne_v Ekspert
07. februar 2005 - 19:31 #19
Altså: rdr.Close();
Avatar billede arne_v Ekspert
07. februar 2005 - 19:34 #20
Man bruger normalt ikke så meget <% %> i ASP.NET, men den her test er
jo heller ikke en normal situation og jeg kan ikke lige komme i tanke
om en meget ASP.NET'sk måde at gøre det på.

Stoppe det ind i en ArrayList i code behind og så bruge en repeater
måske, men det syne sjeg vil være at handikappe ASP.NET lidt i denne
her test.
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 19:42 #21
Så er den der! Tak for hjælpen.
Hmm, uden at lyde som et skarn, tror du så også du kan med MySQL?
Avatar billede arne_v Ekspert
07. februar 2005 - 19:45 #22
Ja !

  MySqlConnection con = new MySqlConnection("Database=Test;Data Source=localhost;User Id=;Password=");
  con.Open();
  for(int i = 0; i < 1000; i++)
  {
        MySqlCommand sel = new MySqlCommand("SELECT felt FROM tabel", con);
        MySqlDataReader rdr = sel.ExecuteReader();
        while(rdr.Read()) {
            string f = (string)rdr[0];
            Response.Write(f);
        }
        rdr.Close();
    }
    con.Close();
Avatar billede arne_v Ekspert
07. februar 2005 - 19:46 #23
Det er så med ByteFX/MySQL .NET provider ikke med ODBC
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 19:47 #24
ok, prøver selv så.. Mange tak for indatsen!!!
Avatar billede arne_v Ekspert
07. februar 2005 - 19:51 #25
Hvis du vil bruge OLE DB mod MySQL, så er det bare at rette connection string til.

Ingen andre ændringer.

Men jeg ville aldrig bruge OLE DB mod MySQL.
Avatar billede arne_v Ekspert
07. februar 2005 - 19:51 #26
og et svar
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 19:59 #27
Hvorfor ikke OLE DB? Jeg tror de andre eksempler jeg har set brugte ODBC faktisk...
Avatar billede arne_v Ekspert
07. februar 2005 - 20:04 #28
din C# kode--(.NET kald)--.NET OLE DB driver--(native kald)--OLE DB for ODBC--(native kald)--ODBC driver--(TCP/IP)--MySQL

versus

din C# kode--(.NET kald)--.NET MySQL driver--(TCP/IP)--MySQL
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 21:25 #29
okay, nu har jeg leget lidt med den anden, m en odbc forbindelse:
<script runat="server">
  private const string ConnStr = "Driver={MySQL ODBC 3.51 Driver};" +
    "Server=db.aoa.dk;Database=web36243;uid=web36243;pwd=19r6239w18;option=3";

  void Page_Load(object sender, EventArgs e)
  {

    using(OdbcConnection con = new OdbcConnection(ConnStr))
    using(OdbcCommand cmd = new OdbcCommand("SELECT * FROM sso_count", con))
    {
      con.Open();
      for(int i = 0; i < 10000; i++)
      {
          DataGrid1.DataSource = cmd.ExecuteReader();
          DataGrid1.DataBind();
    }
    }
  }
</script>

fejlen er som følger: http://www.aoa.dk/sso/mysqlcount.aspx

Samme fejl som før, men hvad gør man v. odbc?
Avatar billede arne_v Ekspert
07. februar 2005 - 21:29 #30
På en eller anden måde skal du have lukket den OdbcDataReader
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 21:32 #31
I know, og jeg har prøvet lidt forskelligt, bla.:
ODBCDataReader.Close();
DataGrid1.DataSource.Close();
DataSource.Close();

men intet har virket endnu.
Avatar billede arne_v Ekspert
07. februar 2005 - 21:34 #32
OdbcDataReader reader = cmd.ExecuteReader();
          DataGrid1.DataSource = reader;
          DataGrid1.DataBind();
          reader.Close();

(hvis man kan kalde data readerens close der)
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 21:39 #33
tja, nu virker det i hvert fald.. Kan man ikke bare skrive teksten ud med response.write ligesom før? Det er lidt åndssvagt at begynde at bruge datagrid her, da funktionen der tæller load tid så ikke virker.
Avatar billede arne_v Ekspert
07. februar 2005 - 21:40 #34
Selvfølgelig kan du det
Avatar billede dj_uncas Nybegynder
07. februar 2005 - 21:44 #35
nevermind jeg fik den selv... Tak for al din hjælp! Sig til hvis du nogensinde skal bruge en test af ASP og ASP.NET i forhold til Access og MySQL!!!
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