Just nu i M3-nätverket
Gå till innehåll
nsky

MyOleDb och asp.net 1.1

Rekommendera Poster

Hej,

har ett projekt som är gjort i asp.net 1.1 med en access databas, och nu vill jag konvertera den till en mySqldatabas istället. Har konverterat databas, inga problem. Eftersom jag använder access och oledb-driver så tänkte jag att det borde vara enklast att använda mig av en OleDb-driver för MySql och på så sätt slippa ändra så mycket kod. Har laddat hem MyOleDb 3.9.6 och installerat den. Min koppling ser ut så här:

 

Databas klassen

 Private myConnection As New OleDbConnection("Provider=MySqlProv.3.9.6;Data Source=quote" & System.Web.HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings("conn")))

 

Web.config

   <appSettings>
    <add key="SQL"
         value="server=localhost;uid=root;pwd=1;database=test;" />
 </appSettings>

 

Men det fungerar inte, får det här felmeddelandet:

No error information available: REGDB_E_CLASSNOTREG(0x80040154).

 

Någon som vet vad felet kan vara? Går det överhuvudtaget att göra så här? Det skulle vara väldigt smidigt om det gick så behöver man inte koda om så mycket.

 

Tack på förhand!

 

/Jonas

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

har aldrig jobbat med mysql men efter att ha skummat din kod bara så ser jag att du hämtar ett värde från AppSettings med nyckeln "conn", men i din Web.Config heter den nyckeln SQL, så börja med att sätta rätt namn så kanske det löser sig.

 

lycka till

 

 

Edit:

Sen såg jag nu också att du kör med en System.Web.HttpContext.Current.Server.MapPath() på din connectionstring. har som sagt aldrig jobbat med mysql men tvivlar på att den ska vara där eftersom den mappar upp sökvägen till en fil, och din connection-string är ingen fil, så fimpa hela System.Web.HttpContext.Current.Server.MapPath skulle jag testat också.

[inlägget ändrat 2008-01-15 15:12:50 av christoffer.e]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tack för att du tog dig tid att hjälpa mig, tyvärr fungerade det inte. Jag får jobba vidare....

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Som alltid när man får till synes otydbara felmeddelanden så skall man använda debuggern (det är det den är till för =) eller en try-catch-sats kring problemavsnittet och sedan kontrollera meddelandet i det undantag som kastas. Ofta får du även gå in i undantagets Inner Exception för att få fram grundproblemet.

 

EDIT: Hur ser dina två redigerade kodstycken ut nu?

[inlägget ändrat 2008-01-15 17:39:27 av Anjuna Moon]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Så här ser hela min databasklass ut, web.config ser likadan ut som tidigare.

Public Class databas
       Private myConnection As New OleDbConnection("Provider=MySqlProv.3.9.6;Data Source=quote" & (ConfigurationSettings.AppSettings("conn")))

       Public Sub New()
           'myConnection = CreateConnection()
       End Sub

       Function CreateConnection()
           'Dim myConnection As New OleDbConnection(myConnString)
           Return myConnection
       End Function

       Function CreateSQLCommand(ByVal strSQL As String) As OleDbCommand
           Dim myCommand As New OleDbCommand(strSQL, myConnection)
           Return myCommand
       End Function

       Function GetNewDataReader(ByVal strSQL As String) As OleDbDataReader
           Try
               myConnection.Open()
               Dim objCommand As OleDbCommand = CreateSQLCommand(strSQL)
               Dim objReader As OleDbDataReader = objCommand.ExecuteReader(CommandBehavior.CloseConnection)
               Return objReader
           Catch Exp As Exception
               Throw (Exp)
           Finally
               myConnection.Close()
           End Try
       End Function

       Public Function GetNewDataSet(ByVal strSQL As String) As DataSet
           Try
               Dim objDataSet As New DataSet
               Dim objAdapter As New OleDbDataAdapter
               myConnection.Open()
               objAdapter.SelectCommand = CreateSQLCommand(strSQL)
               objAdapter.Fill(objDataSet)
               Return objDataSet
           Catch Exp As Exception
               Throw (Exp)
           Finally
               myConnection.Close()
           End Try
       End Function

       Function ExecuteNonQuery(ByVal strSQL As String) As Integer
           Try
               myConnection.Open()
               Dim objCommand As OleDbCommand = CreateSQLCommand(strSQL)
               Dim numRowsAffected As Integer
               numRowsAffected = objCommand.ExecuteNonQuery()
               Return numRowsAffected
           Catch Exp As Exception
               Throw (Exp)
           Finally
               myConnection.Close()
           End Try
       End Function
   End Class

 

Så här ser koden ut för sidan jag försöker köra:

        
Dim strSQL As String = "SELECT DISTINCT anpMarke FROM anpassade"
Dim myDataAdapter As New OleDbDataAdapter(strSQL, myConnection)
Dim ds As DataSet = New DataSet
 Try
           myDataAdapter.Fill(ds, "anpassa")
           ddl_marke.DataSource = ds
           ddl_marke.DataBind()
           ddl_marke.Items.Insert(0, New ListItem("Bilmärke", "-1"))
       Catch ex As Exception
           Throw (ex)
  End Try

 

När jag körde debugern så får jag felet på

myDataAdapter.Fill(ds, "anpassa")

 

 

[inlägget ändrat 2008-01-15 18:11:11 av gunnargren]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Fick det inte att fungera med ex.Message och ex.InnerException.Message, får felmeddelande 'Throw operand must derive from 'System.Exception'. Har ändrat till det men får samma felmeddelande....

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skippa Throw, använd debuggern istället. Sätt en breakpoint på Throw-raden och kontrollera sedan ex.Message och ex.InnerException.Message i ett Watch-fönster

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

nu äntligen fick jag fram det:

 

Message "The 'MySqlProv.3.9.6' provider is not registered on the local machine.

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Har suttit och testa att använda en odbc-koppling istället, går ungefär lika bra...

 

Min connection ser ut så här nu:

Private myConnection As New OdbcConnection("{MySQL ODBC 3.51.23 Driver};Data Source=quote" & (ConfigurationSettings.AppSettings("conn")))

 

 

 

Har ändrat från oledb till odbc och installerat mysql-connector-odbc-3.51.23-win32 men får ungefär samma felmeddelande, är det något jag missat?

 

ERROR [iM002] [Microsoft][ODBC Driver Manager] Datakällan hittades inte och ingen standarddrivrutin är angiven

 

 

 

[inlägget ändrat 2008-01-15 21:29:19 av gunnargren]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Har du verkligen installerat drivarna då? Jag tror inte de kommer automatiskt med mysql-installationen

 

Personligen tycker jag du ska ta smällen och göra de modifieringar som krävs för att använda MySQL Connector för NET istället.

http://dev.mysql.com/doc/refman/5.0/en/connector-net.html

[inlägget ändrat 2008-01-15 21:34:00 av Anjuna Moon]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tack åter igen för att du tar dig tid att hjälpa mig. Har installerat connectorn men när jag skriver imports system.data.mysql så hittar den inte mysql. Räcker det inte med att installera connectorn, måste jag ta in det i projektet på något sett också?

 

 

EDIT: Ser att connectorn verkar vara för .net 2.0, ska se om jag hittar rätt version. Har även hittat en guide för hur jag ska gå till väga...

[inlägget ändrat 2008-01-18 20:39:14 av gunnargren]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
måste jag ta in det i projektet på något sett också?

Ja, du måste lägga till en reference i Solution Explorer. Högerklicka på References-mappen och välj Add reference. Troligtvis ligger den sen under Net-fliken om den är installerad korrekt och ligger i GAC:en

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Det var det jag förstod och jag har försökt, men när jag inte hittade det i reference så trodde jag att man inte behövde göra det. Men som sagt, kan det bero på att jag versionen för .net 2.0?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Nu fungerar det! Men jag har inte hunnit testat själva koden men jag fick till det med att lägga till reference alla fall....

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Men som sagt, kan det bero på att jag versionen för .net 2.0?

Ja, den kan du troligtvis inte använda om du använder VS2003.

 

Exakt vilken drivare var det du laddade ner, har du en direktlänk så jag kan installera den? Jag har både VS2003/1.1 och VS2005/2.0 här, så jag kan testa med båda och se hur det ser ut.

 

EDIT: Ok, såg att du fick till det. Återkom med besked om hur resten går. Lycka till!

[inlägget ändrat 2008-01-18 20:50:06 av Anjuna Moon]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tack för all hjälp! Nu har jag konverterat projektet och allt fungerar som det ska. Tack återigen för all hjälp, uppskattar det verkligen!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tycker du inte det är är bättre att använda ODBC ?

Dom webhotell jag har kollat, erbjuder odbc-kopplingar till mysql.

 

 

Har du installerat mysql ole db provider ?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

"Tycker du inte det är är bättre att använda ODBC ?"

 

Har du verkligen betalt för vad du gör =)

 

 

Phenomen: Berätta gärna vad du gör, för om du promoverar ett så gammalt övergivet gränssnitt som odbc så borde du få sparken från var du nu än sitter.

[inlägget ändrat 2008-01-19 03:36:49 av Anjuna Moon]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Måste bara fråga en sak :)

 

23.2. MySQL Connector/NET-connectorn ska man alltså ladda ner till sin egen dator om man nu vill köra MySql lokalt på sin dator?

 

Ska man koppla upp sig mot MySql på webbhotellet så ska filen läggas upp där...?

Eller den finns redan där... :)

Vissa delar i .NEt har jag så j_vla svårt att greppa :))

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Surftown har odbc drivern installerad. Så det är inga problem för mig å köra odbc.

 

Mysql Connectorn är installerad lokalt. Går hur bra som helst å använda i Windows Forms apps. Fungerar oxå bra å köra i asp.net (om man lägger till mysql.data.dll) i /Bin/ mappen.

 

Men har du en kommersiell produkt, måste du köpa en licens, Det ör det som är nackdelen.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skriv en gång till i tråden, hoppas det är okej för nsky då det lite handlar om connectors.

 

Så den varianten kostar om jag vill använda den för en webbplats på ett webbhotell?

 

Var ligger Bin-mappen i förhållande till webbplatsen(grundplatsen) och ska jag själv lägga upp dll-filen där?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Säljer du en applikatuion som innehåller mysql.data.dll, måste du antigen

göra källkoden tillgänglig för alla eller så måste du köpa en kommersiell licens från mysql.

 

Det är så jag har förstått det.

 

Det är samma sak med mysql-servern. Servern är inte gratis om man ska ta betalt för de produkter där mysql används.

 

 

Ang. Bin mappen...

 

Högerklicka på webprojektet i solution explorer.

* Välj add asp.net folder -> Bin

* Högerklicka igen och välj -> Add reference -> I den rutan, letar efter mysql.data (Connectorn) som du addat ner & installerat från mysql.com tidigare.

* Högerklicka på bin mappen och lägg till mysql.data.dll som finns C:\Program\MySQL\MySQL Connector Net 5.0.8.1\Binaries\.NET 2.0 hos mig iallafall.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...