Kom ihåg mig?
Home Menu

Menu


MySQL tabeller till Object .NET

Ämnesverktyg Visningsalternativ
Oläst 2008-08-23, 16:37 #1
ledstrom ledstrom är inte uppkopplad
Medlem
 
Reg.datum: Jan 2007
Inlägg: 84
ledstrom ledstrom är inte uppkopplad
Medlem
 
Reg.datum: Jan 2007
Inlägg: 84
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
ledstrom är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-08, 13:46 #2
Fruitness Fruitness är inte uppkopplad
Nykomling
 
Reg.datum: Sep 2008
Inlägg: 17
Fruitness Fruitness är inte uppkopplad
Nykomling
 
Reg.datum: Sep 2008
Inlägg: 17
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.
Fruitness är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-09-08, 17:30 #3
ledstrom ledstrom är inte uppkopplad
Medlem
 
Reg.datum: Jan 2007
Inlägg: 84
ledstrom ledstrom är inte uppkopplad
Medlem
 
Reg.datum: Jan 2007
Inlägg: 84
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...
ledstrom är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 18:11.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017