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

MyOleDb och asp.net 1.1


nsky

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

 

Länk till kommentar
Dela på andra webbplatser

christoffer.e

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]

Länk till kommentar
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]

Länk till kommentar
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]

Länk till kommentar
Dela på andra webbplatser

Har du titta på exception-detaljerna då (ex.Message och eventuellt ex.InnerException.Message)?

 

 

Länk till kommentar
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....

 

Länk till kommentar
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

 

Länk till kommentar
Dela på andra webbplatser

nu äntligen fick jag fram det:

 

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

 

 

Länk till kommentar
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]

Länk till kommentar
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]

Länk till kommentar
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]

Länk till kommentar
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

 

Länk till kommentar
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?

 

Länk till kommentar
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....

 

Länk till kommentar
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]

Länk till kommentar
Dela på andra webbplatser

Om du inte får koden att fungera när du sedan testar sajten så pröva med att ställa in IIS:en att köra 2.0 istället för 1.1.

 

Länk till kommentar
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!

 

Länk till kommentar
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]

Länk till kommentar
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 :))

 

Länk till kommentar
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?

 

Länk till kommentar
Dela på andra webbplatser

Jaha, så det är inte helt fritt att använda den connectorn...

Aja, det får bli en egen tråd när det nu blir mer aktuellt, lite annat att göra nu.

 

Tack för svaren!

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...