28. november 2010 - 17:38Der er
28 kommentarer og 1 løsning
Data hentet fra en DB via. SQL, er dette måden at gøre det på idag.
Hej
Har denne side og den virker fint, men ved det er noget jeg har brugt for 2-3 år siden, så ville lige høre om det forsat er måden at gøre det på idag eller om jeg kan gøre koden lidt kortere og derved også hurtigere at køre.
Koder kun i min fritid, derfor jeg spørger på denne måde.
Min codebehind er dette.. Imports System.Data Imports System.Data.SqlClient
Partial Class _Default Inherits System.Web.UI.Page
Public Sub OpenDBproduct() Dim ProductConnection As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
Dim ProductReader As SqlDataReader Dim ProductCommand As SqlCommand
Dim ProductSQL As String = "" ProductSQL = "SELECT * FROM table1 ORDER BY PName DESC;" ProductCommand = New SqlCommand(ProductSQL, ProductConnection)
'Prøv at åben Connection. Try ProductConnection.Open() ProductReader = ProductCommand.ExecuteReader(CommandBehavior.CloseConnection) 'Hvis der er data, udskriv da dataen. If ProductReader.HasRows() Then
Loop Response.Write("</tr></table>") Response.Write("Slutning") Else 'Hvis der ikke er data, lav en fejl tekst. Response.Write("<table style=""width:340px; border:0px;""><tr><td>") Response.Write("Der findes ingen produkter.") Response.Write("<br /><br />") Response.Write("Slutning") Response.Write("</td></tr></table>") End If
Catch ex As Exception Console.WriteLine(ex.Message)
Finally 'Lukker Connection, Reader og Sletter Hukommelse. If Not ProductReader Is Nothing Then ProductReader.Dispose() End If If Not ProductConnection Is Nothing Then ProductConnection.Dispose() End If
Sådan kort fortalt er ideen at du laver en data klasse som: klasse navn = tabel navn property navn = fekt navn
Og så er der en database manager med et API som:
X o = dbmgr.GetByPrimaryKey(id); List<X> lst = dbmgr.GetAll(); dbmgr.Save(o);
etc.
Database manageren skal bare have connection string, så sørger den selv for SqlConnection, SqlCommand, SqlDataReader objekter og diverse SELECT, INSERT, UPDATE sætninger.
D.v.s. at du kan programmer udfra din objekt model og ORM frameworket mapper så dette til den relationelle model i databasen.
Til problem stillinger hvor man skal bruge simple operationer som beskrevet ovenfor anses ORM normalt for at være bedre end direkte SQL fordi man sparer en del trivielt arbejde.
De fleste ORM frameworks er dog lidt komplekse og kræver ofte at man bruger en del tid på at sætte sig ind i hvordan de virker. Hvis du selv skriver din SQL så kan du nemt optimere den. Hvis ORM frameworket genererer SQL'en for dig, så kan det godt være lidt tricky at få den rigtige performance.
<%@ import namespace="NHibernate" %> <html> <head> <title>NHibernate</title> <script language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Dim cfg As NHibernate.Cfg.Configuration = New NHibernate.Cfg.Configuration() cfg.Configure(Server.MapPath("hibernateconfig.xml")) cfg.AddXmlFile(Server.MapPath("t1mapping.xml")) Dim sf As ISessionFactory = cfg.BuildSessionFactory() Dim s As ISession = sf.OpenSession() Dim res As IList(Of T1) = s.CreateQuery("FROM T1 AS t1").List(Of T1)() s.Close() MyRep.DataSource = res MyRep.DataBind() End Sub </script> </head> <body> <form runat=server> <table border='1'> <tr bgcolor='#FF0000'> <th>F1</th> <th>F2</th> </tr> <asp:Repeater id="MyRep" runat="server"> <ItemTemplate> <tr bgcolor='#AAAAAA'> <td><%# DataBinder.Eval(Container.DataItem,"F1") %></td> <td><%# DataBinder.Eval(Container.DataItem,"F2") %></td> </tr> </ItemTemplate> <AlternatingItemTemplate> <tr bgcolor='#FFFFFF'> <td><%# DataBinder.Eval(Container.DataItem,"F1") %></td> <td><%# DataBinder.Eval(Container.DataItem,"F2") %></td> </tr> </AlternatingItemTemplate> </asp:Repeater> </table> </form> </body> </html>
DOM.vb
Imports System
Public Class T1 Private _f1 As Integer Private _f2 As String Public Overridable Property F1 As Integer Get return _f1 End Get Set _f1 = Value End Set End Property Public Overridable Property F2 As String Get return _f2 End Get Set _f2 = Value End Set End Property End Class
hvorfor siger den at min "Items" er ikke defineret i Dim res As IList(Of Items)!?
Public Sub linqdb() Dim cfg As NHibernate.Cfg.Configuration = New NHibernate.Cfg.Configuration() cfg.Configure(Server.MapPath("nhibernateconfig.xml")) cfg.AddXmlFile(Server.MapPath("Productsmapping.xml")) Dim sf As ISessionFactory = cfg.BuildSessionFactory() Dim s As ISession = sf.OpenSession() Dim res As IList(Of Items) = s.CreateQuery("FROM Items AS Products").List(Of Items)() s.Close() MyRep.DataSource = res MyRep.DataBind() End Sub
i dit eks. Dim res As IList(Of T1) = s.CreateQuery("FROM T1 AS t1").List(Of T1)()
Siger du da ikke er t1 er en Tabel i TEST og at du vil have at t1 fromover hedder T1 eller har jeg misforstået noget !? for så burde jeg da bare kunne tage dette og sige Dim res As IList(Of Items) = s.CreateQuery("FROM Items AS Products").List(Of Items)()
altså Products er en tabel i TEST som fremover skal kaldes Items og alle de steder du har skrevet T1 der laver jeg det om til Items..
Så fik jeg lavet filen men når jeg køre det i Visual Studio som debug så melder den fejl ved.
Dim cfg As NHibernate.Cfg.Configuration = New NHibernate.Cfg.Configuration()
ang. Filen eller assemblyen 'Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4' eller en af dens afhængigheder kunne ikke indlæses. Den angivne fil blev ikke fundet.
nej men smid et svar, har fumdet en anden linq lysning via. VS2010.
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.