Panelen



Forumnavigering
Senast inloggade
RSS
Sponsorer

Forum > ASP.NET 1.x och 2.x > Språk - VB.NET

Problem med databasklass.

Hejsan!

Håller på med ett starkt försök med VB nu istället för C#. Mitt problem är en return som spökar för mig. Jag har försökt att få i ordning det själv en längre stund nu och håller på att bli vansinnig.

Kod:

Public Class DataBase
    'Deklarera variabler i olika databaselement.
    Dim strConn As OleDbConnection
    Dim Query As OleDbCommand
    Dim Reader As OleDbDataReader

    'Gör en metod och deklarera dbFilename
    Sub Database(ByVal dbFileName As String)
        'Få kontakt med databasen
        strConn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbFileName)
        'Starta kontakt
        strConn.Open()
    End Sub

    'Gör en funktion som läser data i Databasen
    Public Function OleDbDataReader(ByVal SQL As String) As String
        'Visar vad som ska hämtas i databasen med variabeln SQL
        Query = New OleDbCommand(SQL)
        'Hänvisar hur sql-queryn ska användas
        Query.Connection = strConn
        'Läsaren exekverar queryn
        Reader = Query.ExecuteReader()

        'Visa datan som hämtats
        Return Reader()
    End Function

    'Gör en metod som sätter in queryn i databasen
    Sub InsertQuery(ByVal SQL As String)
        'Säg till systemet att ett kommando är på väg
        Query = New OleDbCommand(SQL)
        'Visa hur man ska göra en anslutning till databasen
        Query.Connection = strConn
        'Exekvera kommandot.
        Query.ExecuteNonQuery()
    End Sub
    'Gör en metod som stänger anslutningen
    Sub Close()
        'Stäng anslutningen till databasen.
        strConn.Close()
    End Sub


End Class

Och självklart har jag includat system.data och system.data.oledb.

Mitt problem i det hela är felmeddelandet "Overload resolution failed because no accessible 'Item' accepts this number of arguments." som ligger i
funktionen som heter OleDbDataReader. Någon som har en idé varför visual studio inte gillar min Return Reader()?

Alla har sina brister.
ID: #19446 | Skapades: 2010-02-16 13:23:10 | Tråden har 12 svar och har lästs 516 gånger.

voigtan
voigtan

Gradering

#19447

Varför kör du vb.net och inte c#? känns omständigt, men men. Felmeddelandet säger att du använder för många paramter till din funktion. Hur ser ditt anrop mot OleDbDataReader som du försöker köra?

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #19447 | Skapades: 2010-02-16 13:53:58

Jag tycker också det är väldigt omständigt. Men jag håller på med ett skolprojekt, lärarna tvingar oss att lära oss skiten. :(

Just nu är jag bara i teststadiet, det ser ut enligt följande:

    Function TestDB() As String
        Dim OleDbTest As DataBase

        OleDbTest = New DataBase()
        lblTest.Text = OleDbTest.OleDbDataReader("SELECT * FROM tblTest")

        Return ("Majs")
    End Function

 

Jag tror jag löste huvudproblemet med

Return Query.ExecuteReader.ToString()

istället för en variabel. Konstigt nog fungerade det.

Alla har sina brister.
ID: #19449 | Skapades: 2010-02-16 13:57:20

voigtan
voigtan

Gradering

#19450

Hur kan du ha Kompilerat detta?

Query.ExecuteReader() retunera INTE en sträng: http://msdn.microsoft.com/en-us/lib...28VS.71%29.aspx

Din kod kan knappast bygga korrekt från start.

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #19450 | Skapades: 2010-02-16 14:07:34

Nej det gör den säkerligen inte, för jag får inte ut någon data. ;)

Något förslag på hur jag ska ändra det? För det står stilla i mitt huvud. :/

Alla har sina brister.
ID: #19451 | Skapades: 2010-02-16 14:10:51

voigtan
voigtan

Gradering

#19452

Läs länken, bygg om din klass och anropar funktionen som den är tänkt:

Citat:
...

    Dim myReader As SqlDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)
While myReader.Read()
Console.WriteLine(myReader.GetString(0))
End While
...

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #19452 | Skapades: 2010-02-16 14:12:41

Ska försöka lösa det. Tack som fasen!

Alla har sina brister.
ID: #19454 | Skapades: 2010-02-16 14:28:09

Har gjort en liknande, eller mer eller mindre identisk class i c# innan, dessa converters som finns online, som konverterar kod till ett annat språk, är dessa att ens tänka på?

Alla har sina brister.
ID: #19455 | Skapades: 2010-02-16 14:52:38

voigtan
voigtan

Gradering

#19456

Du kan blanda C# och VB klasser så det är inga problem, men om jag skall vara ärlig, skriv om denna till C# istället.

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #19456 | Skapades: 2010-02-16 15:00:35

Jag har den färdig i C#, den fungerar klockrent. Dock så är detta kursmaterial för det jag studerar just nu. jag körde min C# kod i en sån där converter. Fick ut en grym version av den i VB.NET.

Public Class Database
    Private Conn As OleDbConnection
    Private Query As OleDbCommand
    Private Reader As OleDbDataReader

    Public Sub New(ByVal dbFilename As String)
        Conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbFilename)
        Conn.Open()
    End Sub

    Public Function ExecuteQuery(ByVal SQL As String) As OleDbDataReader
        Query = New OleDbCommand(SQL)
        Query.Connection = Conn
        Reader = Query.ExecuteReader()

        Return Reader
    End Function

    Public Sub InsertQuery(ByVal SQL As String)
        Query = New OleDbCommand(SQL)
        Query.Connection = Conn
        Query.ExecuteNonQuery()
    End Sub

    Public Sub Close()
        Conn.Close()
    End Sub
End Class

När jag ska anropa den på annat sätt senare får jag error.

Partial Class _Default
    Inherits System.Web.UI.Page
    Dim db As Database = New Database(Server.MapPath("/App_Code/test.mdb.accdb"))
    Sub testDb()
        lblTest.Text = db.ExecuteQuery("SELECT * FROM tblTest")
    End Sub
End Class

"Value of type 'System.Data.OleDb.OleDbDataReader' cannot be converted to 'String'."

Är det för att jag anropar databas innehållet till en Label?

 

Alla har sina brister.
ID: #19457 | Skapades: 2010-02-16 15:05:30

voigtan
voigtan

Gradering

#19458

Tyvärr känns det som du inte läser vad jag skriver,

label.text kräver en string, du retunera en OleDbDataReader

Du måste se om den innehåller någon data och sen sätta din label.text till vad du nu vill retunera, jag förstå inte hur eller vad du hade tänkt sätta din label till alls, Om du tänker logiskt så ser du ju att din SQL fråga ta ut fler än ett fält och rader (99% säkerhet i alla fall).

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #19458 | Skapades: 2010-02-16 15:21:38

Jo, det var det jag menade med mitt senaste inlägg, ursäkta för min dåliga formulering.
Det jag menade var att om jag gör om min output till t.ex. en databinder med en asp:repeater, skulle det fungera bättre då?

Alla har sina brister.
ID: #19459 | Skapades: 2010-02-16 15:34:18

voigtan
voigtan

Gradering

#19460
Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #19460 | Skapades: 2010-02-16 15:38:30
© Copyright 2007-2009 Shadi Domat | Version 3.0 | Sidkarta | Policy