FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Satt och lekte lite och skrev följande kod som jag tycker personligen spar mig mycket tid... Hade tänkt och se om någon har lite feedback på det...
Det hela är mycket enkelt, du anger en Connection string, får upp alla tabeller i databasen, väljer en tabell och vips så har du ett enkelt object (kanske borde använda struct istället) som har samma namn som databasens fält. Plus att du får en funktion som retunerar Arraylist med aktuella objektet utifrån datatabeler.. Jag brukar använda det här rätt så ofta, jag skrev en längre variant också som är Lite mer avancerad som retunrerar funktioner för att spara det aktuella objectet med massa mer.. Men kika gärna lite på det, finns det något enklare sätt? Hur gör ni? Skriv gärna ditt lite extra kod om du känner för det.. Applikationen kräver Mysql.Data.dll filen.. Här kommer ASPX filen... Kod:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="DTToObject.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Bra och ha sak</title> </head> <body> <form id="form1" runat="server"> <div> Connectionstring: <asp:TextBox ID="tbConn" runat="server"></asp:TextBox> <br /> Obejekt namn: <asp:TextBox ID="tbObjectname" runat="server"></asp:TextBox> <br /> </div> <p> <asp:Button ID="btnKoppling" runat="server" Text="Hämta tabeler" /> <asp:Repeater ID="repTabeler" runat="server"> <ItemTemplate> <br /><asp:LinkButton ID="lbTabel" runat="server" CommandArgument='<%#Container.DataItem(0)%>' Text='<%#Container.DataItem(0)%>' OnCommand="GetInfo"/> </ItemTemplate> </asp:Repeater> </p> <asp:PlaceHolder ID="phTabelinfo" runat="server"/> <asp:Panel ID="pOutput" runat="server" BorderColor="Red"/> </form> </body> </html> Och VB filen... Kod:
Imports System.ComponentModel Imports System.Web.UI Imports MySql.Data.MySqlClient Imports System.Data Imports System.Data.Common Imports System.Configuration.ConfigurationManager Imports System.Security.Cryptography Public Class SQL Public SQL As String Public Conn As String Public Function ExecuteSQL(ByVal strTable As String) As DataTable Dim ds As New DataSet Dim Cmd As MySqlCommand Cmd = New MySqlCommand(SQL, New MySqlConnection(Conn)) Dim objCmd As New MySqlDataAdapter(Cmd) objCmd.Fill(ds, strTable) Return ds.Tables(0).Copy End Function End Class Partial Class _Default Inherits System.Web.UI.Page Public LSQL As New SQL Public DT As DataTable Public cControl As Collection Public cControl2 As Collection Public lDT As DataTable Public Tabel As String Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load End Sub Protected Sub btnKoppling_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnKoppling.Click LSQL.Conn = tbConn.Text LSQL.SQL = "show tables" DT = LSQL.ExecuteSQL("tabeler") BindData() End Sub Sub BindData() repTabeler.DataSource = DT DataBind() End Sub Sub GetInfo(ByVal Obj As Object, ByVal E As CommandEventArgs) LSQL.Conn = tbConn.Text phTabelinfo.Controls.Clear() Tabel = E.CommandArgument LSQL.SQL = "SHOW COLUMNS FROM " & Tabel ldt = LSQL.ExecuteSQL("tabeler") Dim I As Integer Dim AR As New ArrayList For I = 0 To lDT.Rows.Count - 1 AR.Add(lDT.Rows(I)(0)) Next Dim Namn As String = tbObjectname.Text AddLine("Public Class " & Namn) For I = 0 To AR.Count - 1 AddLine("Public " & lDT.Rows(I)(0) & " As " & TransformType(lDT.Rows(I)(1))) Next AddLine("End Class") AddLine("") AddLine("Public Function DTTo" & Namn & "(DT As DataTable) As ArrayList") AddLine("Dim I As Integer") AddLine("Dim Current" & Namn & " As New " & Namn) AddLine("For I = 0 To DT.Rows.Count - 1") For I = 0 To AR.Count - 1 AddLine("Current" & Namn & "." & lDT.Rows(I)(0) & " = DT.Rows(I)(""" & lDT.Rows(I)(0) & """)") Next AddLine("Current" & Namn & ".Add(Current" & Namn & ")") AddLine("Next") AddLine("Return Current" & Namn) AddLine("End Function") End Sub Private Function TransformType(ByVal Input As String) As String If Input.Contains("int") = True Then TransformType = "Integer" If Input.Contains("tinyint") = True Then TransformType = "Short" If Input.Contains("text") = True Then TransformType = "String" If TransformType = "" Then TransformType = "Object" End Function Sub AddLine(ByVal X As String) pOutput.Controls.Add(New LiteralControl(X & "<BR/>")) End Sub End Class |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Nykomling
|
Hej,
Har du testat LINQ to SQL eller NHibernate någon gång? Ifall du inte har gjort det så öppnas nog en ny värld i .NET för dig. |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
Hej jag har testat Linq to SQL och jag tycker det blev förtjust, men det är bara för MsSQL... Jag testade en OpenSource lösning till MySQL.. NHibernate har jag även testat, men jag vet inte, jag tog väl mig antagligen inte tid och försökte med det.. Jag läste att det blev lite segt eftersom det bygger på så många olika lager och klasser.. Men men, jag ska nog ta en närmare titt på det... Jag hoppas bara på MySQLs nya Connections klasser som har inbyggt stöd för LINQ...
|
||
![]() |
![]() |
Svara |
|
|