Forum > ASP.NET 1.x och 2.x > Språk - VB.NET
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()?
| Skriv utVarfö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?
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.
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.
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. :/
Läs länken, bygg om din klass och anropar funktionen som den är tänkt:
Dim myReader As SqlDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)
While myReader.Read()
Console.WriteLine(myReader.GetString(0))
End While
...
Ska försöka lösa det. Tack som fasen!
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å?
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.
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?
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).
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å?
Det skall väl gå: http://bytes.com/topic/asp-net/answ...ommand-repeater