Toon posts:

[asp.net, c#, mysql] Error bij gebruik MySQLDriverCS

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

ik wil een repeater vullen mbv een datareader, maar als ik dat wil doen krijg ik de volgende error.

================
An invalid data source is being used for rpInteressegroepen. A valid data source must implement either IListSource or IEnumerable
================

De code is heel simpel, zoals (het volgens mij) hoort...
================
MySQLConnection conn = new MySQLConnection(ConfigurationSettings.AppSettings["ConnectionString"]);

conn.Open();
strSQL = "SELECT * FROM Interessegroepen ORDER BY igNaam";

MySQLCommand cmd = new MySQLCommand(strSQL,conn);
MySQLDataReader reader = (MySQLDataReader)cmd.ExecuteReader();

rpInteressegroepen.DataSource = cmd.ExecuteReader();
rpInteressegroepen.DataBind();

conn.Close();
================

Er staat in de reference van MySQLDriverCS: "This class is IDataReader compliant so take a look into MSDN help to understand how it works."

Zo gezegd, zo gedigidigidaan... Maar goed, heeft iemand een id wat hier in hemelsnaam fout aan is?

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Je kan alleen van een DataReader lezen zolang de verbinding met de database open is. Daarom is een DataReader niet geschikt als datasource (zoals de foutmelding zegt). Je kan wel een DataTable of DataSet gebruiken.

| Toen / Nu


Verwijderd

Topicstarter
Dat is wel mogelijk, het nadeel is alleen dat het one-way is, eenmaal gelezen is weg...

  • whoami
  • Registratie: December 2000
  • Nu online
Volgens de foutmelding gebruik je een ongeldige datasource.

Een DataRepeater wil enkel DataSources die interfaces IListSource of IEnumerable implementeren.
Ik heb het net ff gechecked en een SqlDataReader implementeert wel degelijk de IEnumerable interface. (Tenzij die MySQLDataReader dat niet doet, maar ik veronderstel van wel).

Tip: gebruik ook eens code-tags om je code te posten, dat leest heel wat makkelijker.

Ik denk dat je fout hiermee te maken heeft:
Er kan per connectie slechts 1 datareader open zijn. Jij doet het volgende:
code:
1
2
MySQLDataReader reader = cmd.ExecuteReader(); // Open een reader
rpInteressegroepen.DataSource = cmd.ExecuteReader(); nog een reader met dezelfde conn.

Dat lukt dus niet.
Waarom creeër je 2x een datareader? 1x is voldoende hoor.
Dus, ofwel doe je het zo:
code:
1
2
3
MySQLDataReader reader = cmd.ExecuteReader();
rptGroep.DataSource = reader;
rptGroep.DataBind();

of
code:
1
2
rptGroep.DataSource = cmd.ExecuteReader();
rptGroep.DataBind();

[ Voor 4% gewijzigd door whoami op 27-12-2002 18:51 ]

https://fgheysels.github.io/


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Ok, maar een DataReader implementeert niet de IEnumerable interface. Ligt het daar niet aan dan?

| Toen / Nu


  • whoami
  • Registratie: December 2000
  • Nu online
SuperRembo schreef op 27 december 2002 @ 18:52:
Ok, maar een DataReader implementeert niet de IEnumerable interface. Ligt het daar niet aan dan?

Een datareader implementeert die wel (mocht het niet zo zijn, dan zou het idd daar aan liggen).

Uit de .NET framework SDK help:
code:
1
2
public sealed class SqlDataReader : MarshalByRefObject,
   IEnumerable, IDataReader, IDisposable, IDataRecord

https://fgheysels.github.io/


Verwijderd

Topicstarter
Hoi,

kheb nu het volgende, en nog steeds dezelfde error.

code:
1
2
3
4
5
6
7
8
9
10
11
MySQLConnection conn = new MySQLConnection(ConfigurationSettings.AppSettings["ConnectionString"]); 

conn.Open(); 

strSQL = "SELECT * FROM Interessegroepen ORDER BY igNaam";  
MySQLCommand cmd = new MySQLCommand(strSQL,conn); 

rpInteressegroepen.DataSource = cmd.ExecuteReader();
rpInteressegroepen.DataBind();
           
conn.Close();
Ok, maar een DataReader implementeert niet de IEnumerable interface. Ligt het daar niet aan dan?
Zowel de DataReader als de MySQLDataReader zijn IDataReader compliant...

ps... ben nu even weg, dus reageer niet zo heel snel, reageer later vanaaf! tnx!

[ Voor 9% gewijzigd door Verwijderd op 27-12-2002 19:22 . Reden: ps'je ]


  • EfBe
  • Registratie: Januari 2000
  • Niet online
ligt aan die 2 keer openen van een reader. De 2e is nl. null -> invalid datasource.
hmm. Bugt die query niet? Dit ivm het feit dat bij een empty query result de datareader helemaal niets oplevert.

[ Voor 44% gewijzigd door EfBe op 27-12-2002 19:24 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
EfBe schreef op 27 december 2002 @ 19:22:
ligt aan die 2 keer openen van een reader. De 2e is nl. null -> invalid datasource.
hmm. Bugt die query niet? Dit ivm het feit dat bij een empty query result de datareader helemaal niets oplevert.
Nope die is zo in orde als het maar kan, als ik
code:
1
while (cmd.read)


doe, dan gaat alles wel goed...

  • whoami
  • Registratie: December 2000
  • Nu online
EfBe schreef op 27 december 2002 @ 19:22:
ligt aan die 2 keer openen van een reader. De 2e is nl. null -> invalid datasource.
hmm. Bugt die query niet? Dit ivm het feit dat bij een empty query result de datareader helemaal niets oplevert.


Ik had ook al verondersteltt dat het ligt bij het 2x openen van die reader, maar dat zou bij nader inzien geen compiler error mogen veroorzaken. Er zou dan wel een runtime exception gegooid worden.

Misschien ligt het toch aan die MySQLDataReader die die interfaces niet implementeert.
Probeer eens een connectie te maken en een datareader te gebruiken uit de System.Data.OleDb namespace ipv die MySQL classes.
(OleDbConnection, OleDbCommand, OleDbDataReader).

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 28 december 2002 @ 02:17:

[...]


Ik had ook al verondersteltt dat het ligt bij het 2x openen van die reader, maar dat zou bij nader inzien geen compiler error mogen veroorzaken. Er zou dan wel een runtime exception gegooid worden.

Misschien ligt het toch aan die MySQLDataReader die die interfaces niet implementeert.
Probeer eens een connectie te maken en een datareader te gebruiken uit de System.Data.OleDb namespace ipv die MySQL classes.
(OleDbConnection, OleDbCommand, OleDbDataReader).
maar dat wil ik niet :(

morgen ochtend zal ik het met een vers hoofd proberen, bedankt voor de tip....

  • whoami
  • Registratie: December 2000
  • Nu online
[nohtml]
Waarom niet?
Die OleDb classes zouden ook met MySQL overweg moeten kunnen. Ze zullen misschien wel wat trager zijn dan die MySQL classes die jij nu gebruikt.

Probeer anders ff een DataSet te gebruiken.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 28 december 2002 @ 02:28:
[nohtml]
[...]

Waarom niet?
Die OleDb classes zouden ook met MySQL overweg moeten kunnen. Ze zullen misschien wel wat trager zijn dan die MySQL classes die jij nu gebruikt.

Probeer anders ff een DataSet te gebruiken.
Je geeft het antwoord zelf al... :P

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Er zijn meerdere MySQL drivers, er is een commerciele, die al geprobeerd? (de trial dan). Waar het whoami om gaat is of de code an sig werkt, los van de provider die gebruikt wordt. Als dat het geval is, dan weet je dat het ligt puur aan de MySQL driver.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
Ik word gek, ik wil GEEN gebruik maken van MyODBC of andere exotische dingen. Naar mijn weten is het nl. niet mogelijk om mbv van de normale OLEDB interface een MySQL database aan te spreken.

Op welke wijze kan ik dan een Reader in een dataset pompen??
:'( plz help :'(

Verwijderd

Topicstarter
EfBe schreef op 28 December 2002 @ 13:56:
Er zijn meerdere MySQL drivers, er is een commerciele, die al geprobeerd? (de trial dan). Waar het whoami om gaat is of de code an sig werkt, los van de provider die gebruikt wordt. Als dat het geval is, dan weet je dat het ligt puur aan de MySQL driver.
kheb het id dat het een bugje in de MySQLDriverCS is...

  • whoami
  • Registratie: December 2000
  • Nu online
Verwijderd schreef op 28 december 2002 @ 13:57:
Ik word gek, ik wil GEEN gebruik maken van MyODBC of andere exotische dingen. Naar mijn weten is het nl. niet mogelijk om mbv van de normale OLEDB interface een MySQL database aan te spreken.


Waarom zou het niet mogelijk zijn om mbhv de OleDb classes een MySQL database te benaderen??
OleDb is generiek, en zou normaal gezien iedere RDBMS (Ok, MySQL is misschien geen echte RDBMS) moeten kunnen benaderen

https://fgheysels.github.io/


Verwijderd

Ik ben laatste week ook bezig geweest met het maken van een connectie
naar een MySQL db. Ben ook de MySQLDriverCS tegengekomen en hetzelfde
probleem ondervonden. Daarna de ODBC mannier geprobeerd, deze werkte
alleen in een C# windows app en niet voor een web app. Dit lag volgens google
topic aan de wijze waarop web apps geen toegang hebben tot sommige dll's ofzo. Kon je wel op 1 of andere mannier verhelpen. Niet verder naar gekeken.

Toen bij MyOLEDB gekeken. Werkt perfect. Je moet dan via de mysql.com site even
de OLEDB driver downloaden, instaleren en dan je programma schrijven:
code:
1
2
3
4
sCon ="Provider=MySqlProv.3.0;Data Source=db_name;Password=****;User ID=user_name;Location=http:......;"
Ocon=new OleDbConnection("");
Ocon.ConnectionString = sCon;
Ocon.Open();

Je kan hierna alles doen wat je maar wilt, readers, dataset e.d.

[ Voor 7% gewijzigd door Verwijderd op 29-12-2002 15:14 ]


Verwijderd

Topicstarter
Verwijderd schreef op 29 December 2002 @ 15:12:
Ik ben laatste week ook bezig geweest met het maken van een connectie
naar een MySQL db. Ben ook de MySQLDriverCS tegengekomen en hetzelfde
probleem ondervonden. Daarna de ODBC mannier geprobeerd, deze werkte
alleen in een C# windows app en niet voor een web app. Dit lag volgens google
topic aan de wijze waarop web apps geen toegang hebben tot sommige dll's ofzo. Kon je wel op 1 of andere mannier verhelpen. Niet verder naar gekeken.

Toen bij MyOLEDB gekeken. Werkt perfect. Je moet dan via de mysql.com site even
de OLEDB driver downloaden, instaleren en dan je programma schrijven:
code:
1
2
3
4
sCon ="Provider=MySqlProv.3.0;Data Source=db_name;Password=****;User ID=user_name;Location=http:......;"
Ocon=new OleDbConnection("");
Ocon.ConnectionString = sCon;
Ocon.Open();

Je kan hierna alles doen wat je maar wilt, readers, dataset e.d.
Tnx voor je tip, vind het alleen zo zonde om NOG weer een dll in te bakken :(

Maar dat ga ik ff doen!

ps... welke dll heb je binnengehaald in je project? Als ik MyProv.dll binnenhaal, zegt VS.NET dat het geen correcte dll is... :|

[ Voor 8% gewijzigd door Verwijderd op 29-12-2002 19:18 ]


Verwijderd

Topicstarter
kick tha bitch...

Verwijderd

Je gebruikt: using System.Data.OleDB en je installed de OleDB driver van MySQL.
Deze driver is te vinden op de MySQL site.
Je hoeft dan verder geen dll te includen, je maakt namelijk gebruik van de ole db die je import...

Verwijderd

Topicstarter
dus het werk niet als op de server MyOLEDB niet geinstalleerd is... :'(
Pagina: 1