ledstrom |
2008-08-23 16:37 |
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
|