26. august 2004 - 19:59Der er
20 kommentarer og 1 løsning
Dataset og datareader i forlængelse af database klasse
Hejsa,
Jeg har opbygget en klasse der indeholder funkrioner der åbner diverse databaser MsSql, Mysql, Access osv. et eksempel på det nedenfor :
'--- Skaber forbindelse til access database Public Shared Sub AccessConnect() Dim StrPath As String = "C:\Data\Access.mdb" Dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & StrPath Dim Conn = New OleDbConnection(ConnString) Conn.Open() End Sub
Og alt det virker ganske fint. Nu vil jeg så lave en klasse som skal håndtere Select, Insert, Update, Delete i databasen på en tabel. Og lad os holde det simpelt så jeg har en tabel med felterne id, fornavn, efternavn, brugernavn og adgangskode. Jeg er ny på .Net og har ikke helt forstået det med at få lagt data i et dataset eller bruge datareaderen til at præsentere indholdet fra tabellen og håber derfor at der er en der kan/vil hjælpe mig igang med dette ved at vise et eksempel på en select og en insert ved hjælp af både dataset og datareader og det skal være i form af functions der ligger i mit datalag, som tilgåes fra mit buisnesslag for til sidst at vise det i mit designlag. Men bare rolig der er kun tale om mit datalag i denne tråd :o) håber der er en der vil hjælpe ?
Dim Cmd As XxxxCommand = New XxxxCommand("INSERT INTO tabelnavn VALUES(123,'abc')", Conn); Cmd.ExecuteNonQuery
simpel læsning med data reader:
Dim Cmd As XxxxCommand = New XxxxCommand ("SELECT * FROM tabelnavn", Conn) Dim Rdr As XxxxxDataReader = Cmd.ExecuteReader While Rdr.Read Dim f1 As Integer = CType(Rdr(0), Integer) Dim f2 As String = CType(Rdr(1), String) ... End While
Xxxx er så Sql, OleDb eller MySql afhængig af databasen.
DataSet bruges f.eks. som:
Dim da As XxxxDataAdapter = New XxxxDataAdapter("SELECT * FROM tabelnavn", Conn); Dim ds As DataSet ds = New DataSet(); da.Fill(ds);
1. Database klasse der udelukkende holder på connection til diverse databaser som eks. ovenfor viser.
2. Datalags klasse der kun har med select, insert, update og delete i databasen
3. Buisnesslags klasse der tager sig af diverse håndtering af data fra formular og andet inden der tagaes fat i datalaget.
4. Designlag ja det giver jo næsten sig selv her er der tale om mine .aspx, .ascx sider osv.
Hjælper det lidt på det ? :o)
Jeg vil lige teste lidt med det du har skrevet indtil nu dog er jeg lidt i tvivl med det her Xxxx du skriver i f.eks denne : Dim da As XxxxDataAdapter = New XxxxDataAdapter("SELECT * FROM tabelnavn", Conn)
Og ja jeg kan godt se at det heller ikke er det visual Studio .net ligger op til men det er da meget nemmere at vedligeholde database adgang på den måde istedet for at der skal trækkes en database connection hver gang den skal bruges.
Min database klasse ser ud som følger dog uden alle functions :
Public Class cls_DbClass '--- Skaber forbindelse til sql server Public Shared Sub SqlConnect() Dim ConnString As String = "Data Source=NEWAGE-LABTOP2;Initial Catalog=db;User Id=user;Password=pass;" Dim Conn = New SqlConnection(ConnString) Conn.Open() End Sub
'--- Skaber forbindelse til access database Public Shared Sub AccessConnect() Dim StrPath As String = "C:\Data\database.mdb" Dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & StrPath Dim Conn = New OleDbConnection(ConnString) Conn.Open() End Sub End Class
Denne laver jeg så en Imports på, på de sider hvor jeg skal bruge den og i dette tilfælde på min datalags klasse, hvor jeg vil lave disse select, insert osv. functioner som så retunere et dataset. Det virker for mig som en ganske fin løsning, men ikke sikkert at det er det bedste ?!? :o)
Du skal være opmærksom på at SqlConnection og alle de andre XxxxConnection har en connection pool bagved, således at det ikke er en dyr operation at lave en connection, fordi der skal ikke laves en fysisk database connection kun alokeres en eksisterende fra en connection pool.
Imports System Imports System.Data Imports System.Data.SqlClient Imports System.Data.OleDb Imports System.Data.Odbc
Public Class MultiDb Public Shared Function GetConnection(ByVal constr As String) As IDbConnection If constr.ToUpper.IndexOf("DRIVER=") >= 0 Then Return New OdbcConnection (constr) Else If constr.ToUpper.IndexOf("PROVIDER=") >= 0 Then Return New OleDbConnection (constr) Else If constr.ToUpper.IndexOf("TRUSTED_CONNECTION=") >= 0 OrElse constr.ToUpper.IndexOf("INTEGRATED SECURITY=") >= 0 Then Return New SqlConnection (constr) Else Return Nothing End If End If End If End Function End Class
Class TestClass
Private Shared Sub test(ByVal constr As String) Dim con As IDbConnection = MultiDb.GetConnection(constr) con.Open Dim cmd As IDbCommand = con.CreateCommand cmd.CommandText = "SELECT * FROM T1" Dim rdr As IDataReader = cmd.ExecuteReader While rdr.Read Dim f1 As Integer = CType(rdr(0), Integer) Dim f2 As String = CType(rdr(1), String) Console.WriteLine(f1 + " " + f2) End While con.Close End Sub
Public Shared Sub Main(ByVal args As String()) test("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb") test("server=ARNEPC2;Integrated Security=SSPI;database=Test") End Sub End Class
Ideen er den at den returnerer en IDbConnection som er et interface som alle XxxxConnection implementerer og som derfor gør at resten af koden kan laves database uafhængig.
Jeg har desværre ikke fået prøvet det af endnu da jeg har ret meget om ørene endnu, men jeg skal nok kigge på så hurtigt som muligt.
/Websam
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.