[.NET] ODBC Mysql connectie in Webservice

Pagina: 1
Acties:

  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
Ik ben bezig om via een webservice mijn MySQL database te kunnen benaderen. Ik heb hiermee een beetje lokaal zitten stoeien. Dat is gelukt, ik kan een ODBC verbinding naar mijn MySQL database maken. Nu dacht ik dat 'eventjes' in mijn Webservice te plakken maar dat lukt dus niet. Ik heb het op 2 manieren geprobeerd maar bij beide krijg ik dezelde error.

Methode 1:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public string GetCustomerDetails(string sKlantnr)
{
    OdbcConnection conn = new OdbcConnection("dsn=pcsupport;uid=root;pwd=");

    string sNaam = "";

    string sQuery = "SELECT naam FROM klantgegevens WHERE klantnr='" + sKlantnr + "'";
    try
    {
        conn.Open();            //Nu krijg ik de exception hier
        OdbcCommand insertCMD=new OdbcCommand(sQuery);
        insertCMD.Connection = conn;

        OdbcDataReader result = insertCMD.ExecuteReader(CommandBehavior.CloseConnection);
        while(result.Read())
        {
            sNaam = result.GetString(0);
        }
        if (conn.State == ConnectionState.Open)
            conn.Close();
            
        return sNaam;
    }
    catch (Exception exp)
    {
        return exp.Message;
    }
}


Methode 2:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public DataSet GetCustomerDetails(string sKlantnr)
{
    DataSet DS = new DataSet();
    string sQuery = "SELECT * FROM klantgegevens WHERE klantnr='" + sKlantnr + "'";
    try
    {
        OdbcConnection conn = new OdbcConnection("dsn=pcsupport;uid=root;pwd=;");
        OdbcDataAdapter adapter = new OdbcDataAdapter();
        adapter.SelectCommand = new OdbcCommand(sQuery, conn);
        adapter.Fill(DS);          // Hier krijg ik een exception
    }
    catch (Exception e)
    {
        throw e;
    }
    return DS;
}


De exception die ik bij allebei de methodes krijg:
bij methode 1: conn.Open();
bij methode 2: adapter.Fill(DS);
code:
1
2
3
ERROR [IM002] [Microsoft][ODBC-stuurprogrammabeheer]
De naam van de gegevensbron is niet gevonden en er
is geen standaardstuurprogramma opgegeven


Vooral de exception bij methode 2 vind ik vreemd. Waarom mag ik geen DataSet vullen in een Webservice?

Beide methodes werken dus wel in een simpele form applicatie maar krijg ik niet draaiende in een Webservice. Op enkele forums heb ik al wat gelezen over het gebruik van "Impersonate". Hiermee zou het mogelijk zijn om dit voor elkaar te krijgen. Ik heb mijn web.config file aangepast met de volgende regels:

code:
1
2
3
<system.web>
  <identity impersonate="true" userName="hostname\webuser" password="webuser"/>
</system.web>


Op de host waar de webservice (hostname) is de gebruiker 'webuser' met password 'webuser' aangemaakt. Deze gebruiker heeft administrator rechten.

Iemand die mij en tip kan geven? zit nu behoorlijk vast.
Skiwi

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Heb je de goede dsn wel op de server aangemaakt. Want hij kan gewoon de gegevensbron niet vinden

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
Ik dacht ook eerst dat het daar aan moest liggen. Maar hoe verklaar je dan dat deze 2 functies het in een Form wel doen? Dus volgens mij kan het daar echt niet aan liggen.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Probeer anders die dsn gewoon eens zo te maken dat het een System dsn heeft waar everyone rechten op heeft. Dan kan je die impersonate ook even achterwege laten. Als dit dan werkt kan je altijd de security nog omhoog gooien

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
edit:
oops quote inplaats van edit :)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
Thanks! Ik zit het ook net op een andere site te lezen over het gebruik van een system dsn. Binnen 2 minuutjes heb ik het werkend gekregen ;) Dit zijn van die kleine dingen waar je uren naar kunt zoeken (en dat heb ik ook gedaan).

Oplossing (voor de geinteresseerden): een system dsn maken. (een voorbeeld is te vinden op: http://www.devasp.com/samples/dsn_sql.asp alleen maken ze daar een Microsoft SQL Server dsn aan.)

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ook nog even ter informatie. Als je gebruik maakt van .net is het niet slim om gebruik te maken van een dsn als je gebruik maakt van Microsoft Sql Server omdat hier speciale classes voor zijn die zijn geoptimaliseert voor MS SQL server en deze maken geen gebruik van een dsn maar gewoon van een connection string in de vorm van
user id={UserName};password={Password};initial catalog={DataBase naam};data source={Sql Server};Connect Timeout={TimeOut}

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Waarom gebruik je niet de MySQL managed .NET provider? o.a. hier te downloaden: www.einfodesigns.com

Personal license is gratis.
Pagina: 1