Har nu uppdaterat och har nu denna design på det hela(tagit det bästa från olika håll... ;) ):
Klassen DataL: Har hand om databasen
Klassen DataAccessL : Ärver från DataL och har hand om saker så som skapandet av DataSet/DataReader och Update/Instert etc i sql
Klassen BusinessL: Ärver från DataAccess och här finns funktionerna.
Presentationslagret: Skapar instans och presenterar datan etc
Så nu är det alltså 4 lager!
Personligen hade jag haft ett fjärde lager mellan Business lagret och datalagret. Detta lager hade haft hand om businessobjektets dataccess och hade kompilerats i ett eget assembly. Detta för att slippa blanda in sql kod och liknande i businessobjektet.
Har ett 4:e lager nu men har inte kommit ifrån att jag måste ha sql-koden i detta lager... Skulle ju kunna gå att ordna med ett 5:e lager mellan Business och DataAccess eller?
Om du nu sätter ditt objBusinessL objekt till Nothing, slutar inte Datagriden att fungera? Man bör ju inte ligga med öppna objekt på detta sätt utan man bör hela tiden jobba Stateless.
Nja vet inte om det gör det... det verkar inte som det i alla fall... kan ju lösas med att man skapar ett dataset i presentationslagret
Dim objBusinessL as BusinessL = New BusinessL
dim ds as dataset = objBusinessL.GetUserInfo("1")
DataGrid1.DataSource= ds
DataGrid1.Databind()
En annan nackdel men en datareader är att den alltid kräver en aktiv,öppen koppling till databasen och det är inte heller att rekommendera
Jo men jag använde ett DataSet i min tidigare variant, den har inte en öppen anslutning vad jag har förstått...
Här kommer koden: data.vb
' --------------
' Data.vb
' --------------
' Namespacen som importeras
Imports System
Imports System.Xml
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Namespace Data
Public Class DataL
Dim strCnn as String = ConfigurationSettings.AppSettings("SqlConnect")
Function GetConnection()
Dim objCnn As New SqlConnection(strCnn)
Return objCnn
End Function
End Class
Public Class DataAccessL
Inherits DataL
Public objCnn As SqlConnection = GetConnection()
Function CreateCommand(SqlStatement as String)
Dim SqlCommand as New SqlCommand(SqlStatement,objCnn)
Return SqlCommand
End Function
Function RunNonQuery(SqlStatement As String)
try
objCnn.Open()
Dim SqlCommand as SqlCommand =CreateCommand(SqlStatement)
SqlCommand.ExecuteNonQuery()
Catch Exp As SqlException
throw(Exp)
Finally
objCnn.Close()
End Try
End Function
Function RetriveDataSet(SqlStatement As String)
Try
Dim objDataSet as New DataSet()
objCnn.Open()
Dim objAdapt As New SqlDataAdapter()
objAdapt.SelectCommand = CreateCommand(SqlStatement)
objAdapt.Fill(objDataSet)
Return objDataSet
Catch Exp as SqlException
throw(Exp)
Finally
objCnn.Close()
End Try
End Function
Function RetriveDataReader(SqlStatement as String)
Try
objCnn.Open()
Dim Command As SqlCommand = CreateCommand(SqlStatement)
Dim dr As SqlDataReader = Command.ExecuteReader(CommandBehavior.CloseConnection)
objCnn.Close()
Return dr
Catch Exp as SqlException
throw(Exp)
Finally
objCnn.Close()
End Try
End Function
End Class
Public Class BusinessL
Inherits DataAccessL
Public Function GetUserInfo(Id as String)
Return(RetriveDataSet("SELECT * FROM tbl_test WHERE id = '"& Id &"' "))
End Function
Public Function UpdateUserInfo(Id as String)
RunNonQuery("Update tbl_test Set password='test' Where id = '"& Id &"'")
End Function
End Class
End Namespace
aspx filen
<%@ Page Language="VB" %>
<%@ import Namespace="Data" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
<script runat="server">
Sub Button1_Click(sender As Object, e As EventArgs)
Dim test as String ="1"
Dim objBusinessL as BusinessL = New BusinessL
dim ds as dataset = objBusinessL.GetUserInfo("1")
DataGrid1.DataSource= ds
DataGrid1.Databind()
objBusinessL.UpdateUserInfo("1")
End Sub
</script>
<html>
<head>
</head>
<body>
<form runat="server">
<p>
<asp:Button id="Button1" onclick="Button1_Click" runat="server" Text="Button"></asp:Button>
</p>
<p>
<asp:DataGrid id="DataGrid1" runat="server"></asp:DataGrid>
</p>
<p>
</p>
</form>
</body>
</html>
hmm blev lite kod....
Kommentarer :q :q