Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Come gestire un database mySQL con ADO.NET

    Ho visto in questo forum (e pure in altri) che ci sono diversi problemi a dover gestire database mySQL con ASP.NET,c'è chi utilizza ADO chi ODBC, in ogni caso la situazione è molto complessa (almeno per me).
    Dopo giorni di ricerche e di tentativi vani, ho trovato un provider ADO.NET per mySQL ( http://crlab.com/mysqlnet/ ), a me è funzionato subito e non l'ho trovato molto complesso.

    Posto un po' di codice (tratto da ASP.NET guida completa di Apogeo e debitamente modificato), sperando che possa risparmiare un po' di fatica a qualcuno di voi.

    Per far funzionare l'esempio basta creare un database mySQL equivalente a quello usato dalla guida di Apogeo, lo potete scricare da qui ( http://www.apogeonline.com/libri/009.../databases.zip ), si chiama "banking.mdb".
    Bisogna ovviamente registrare i nuovi componenti e usare le classi per mysql, comunque nell'esempio c'è tutto quello che serve.

    codice:
    <%@ Page CompilerOptions=""/R:"C:\Programmi\CoreLab\MySQLDirect.NET\CoreLab.MySql.dll""" Debug="true" %>
    <%@ import Namespace="System.Data" %>
    <%@ import Namespace="System.Data.OleDb" %>
    <%@ import Namespace="CoreLab.MySql" %>
    <script runat="server">
        
        
        Dim conn As New MySqlConnection("User=root; pwd=mypassword; Host=localhost; Port=3306; Database=banking")
        
        sub Page_Load(obj as Object, e as EventArgs)
           if Not Page.IsPostBack then
              FillDataGrid()
           end if
        end sub
        
        sub Submit(obj as object, e as eventargs)
    
           dim i, j as integer
           dim params(7) as string
           dim strText as string
           dim blnGo as boolean = true
        
           j = 0
        
           for i = 0 to AddPanel.Controls.Count - 1
              if AddPanel.controls(i).GetType Is GetType(TextBox) then
                 strText = Ctype(AddPanel.Controls(i), TextBox).Text
                 if strText <> "" then
                    params(j) = strText
                 else
                    blnGo = false
                    lblMessage.Text = lblMessage.Text & "You forgot to enter " & _
                       "a value for " & AddPanel.Controls(i).ID & "
    
    "
                    lblMessage.Style("ForeColor") = "Red"
                 end if
                 j = j + 1
              end if
           next
        
           if not blnGo then
              exit sub
           end if
        
           dim strSQL as string = "INSERT INTO tblUsers " & _
              "(FirstName, LastName, Address, City, State, " & _
               "Zip, Phone) VALUES (" & _
              "'" & params(0) & "'," & _
              "'" & params(1) & "'," & _
              "'" & params(2) & "'," & _
              "'" & params(3) & "'," & _
              "'" & params(4) & "'," & _
              "'" & params(5) & "'," & _
              "'" & params(6) & "')"
        
           ExecuteStatement(strSQL)
        
           FillDataGrid()
        end sub
        
        sub dgData_Edit(obj as object, e as DataGridCommandEventArgs)
           FillDataGrid(e.Item.ItemIndex)
        end sub
        
        sub dgData_Delete(obj as object, e as DataGridCommandEventArgs)
           dim strSQL as string = "DELETE FROM tblUsers " & _
              "WHERE UserID = " & e.Item.ItemIndex + 1
        
           ExecuteStatement(strSQL)
        
           FillDataGrid()
        end sub
        
        sub dgData_Update(obj as object, e as DataGridCommandEventArgs)
           if UpdateDataStore(e) then
              FillDataGrid(-1)
           end if
        end sub
        
        sub dgData_Cancel(obj as object, e as DataGridCommandEventArgs)
           FillDataGrid(-1)
        end sub
        
        sub dgData_PageIndexChanged(obj as Object, e as DataGridPageChangedEventArgs)
           dgData.DataBind()
        end sub
        
        function UpdateDataStore(e as DataGridCommandEventArgs) _
           as boolean
        
           dim i,j as integer
           dim params(7) as string
           dim strText as string
           dim blnGo as boolean = true
        
           j = 0
        
           for i = 1 to e.Item.Cells.Count - 3
              strText = Ctype(e.Item.Cells(i).Controls(0), TextBox).Text
              if strText <> "" then
                 params(j) = strText
                 j = j + 1
              else
                 blnGo = false
                 lblMessage.Text = lblMessage.Text & "You forgot to enter " & _
                    "a value
    
    "
              end if
           next
        
           if not blnGo then
              return false
              exit function
           end if
        
           dim strSQL as string = "UPDATE tblUsers SET " & _
              "FirstName = '" & params(0) & "'," & _
              "LastName = '" & params(1) & "'," & _
              "Address = '" & params(2) & "'," & _
              "City = '" & params(3) & "'," & _
              "State = '" & params(4) & "'," & _
              "Zip = '" & params(5) & "'," & _
              "Phone = '" & params(6) & "'" & _
              " WHERE UserID = " & Ctype(e.Item.Cells(0).Controls(1), Label).text
        
           ExecuteStatement(strSQL)
           return blnGo
        end function
        
        sub FillDataGrid(Optional EditIndex as integer=-1)
    
           dim objCmd as new mysqlCommand _
              ("select * from tblUsers", Conn)
           dim objReader as mysqlDataReader
        
           try
              objCmd.Connection.Open()
              objReader = objCmd.ExecuteReader()
           catch ex as Exception
              lblMessage.Text = "Error retrieving from the database. Please" & _
                 " make sure all values are correctly input"
           end try
        
           dgData.DataSource = objReader
           if not EditIndex.Equals(Nothing) then
              dgData.EditItemIndex = EditIndex
           end if
        
           dgData.DataBind()
        
           objReader.Close
           objCmd.Connection.Close()
        
        end sub
        
        function ExecuteStatement(strSQL)
           dim objCmd as new mysqlCommand(strSQL, Conn)
        
           try
              objCmd.Connection.Open()
              objCmd.ExecuteNonQuery()
           catch ex as Exception
              lblMessage.Text = "Error updating the database. Please" & _
                 " make sure all values are correctly input"
           end try
        
           objCmd.Connection.Close()
        end function
    
    </script>
    <html>
    <head>
    </head>
    <body>
        <asp:Label id="lblMessage" runat="server"></asp:Label>
        <form runat="server">
            <asp:DataGrid id="dgData" runat="server" BorderColor="black" GridLines="Vertical" cellpadding="4" cellspacing="0" width="100%" AutoGenerateColumns="False" OnDeleteCommand="dgData_Delete" OnEditCommand="dgData_Edit" OnCancelCommand="dgData_Cancel" OnUpdateCommand="dgData_Update" OnPageIndexChanged="dgData_PageIndexChanged">
                <Columns>
                    <asp:TemplateColumn HeaderText="ID">
                        <ItemTemplate>
                            <asp:Label id="Name" runat="server" Text='<%# Container.DataItem("UserID") %>' />
                        </ItemTemplate>
                    </asp:TemplateColumn>
                    <asp:BoundColumn HeaderText="FirstName" DataField="FirstName" />
                    <asp:BoundColumn HeaderText="LastName" DataField="LastName" />
                    <asp:BoundColumn HeaderText="Address" DataField="Address" />
                    <asp:BoundColumn HeaderText="City" DataField="City" />
                    <asp:BoundColumn HeaderText="State" DataField="State" />
                    <asp:BoundColumn HeaderText="Zip" DataField="Zip" />
                    <asp:BoundColumn HeaderText="Phone" DataField="Phone" />
                    <asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" HeaderText="Edit" />
                    <asp:ButtonColumn HeaderText="" text="Delete" CommandName="delete" />
                </Columns>
            </asp:DataGrid>
            
    
    
                <asp:Panel id="AddPanel" runat="server">
                    <table>
                        <tbody>
                            <tr>
                                <td valign="top" width="100">
                                    First and last name: 
                                </td>
                                <td valign="top" width="300">
                                    <asp:TextBox id="tbFName" runat="server"></asp:TextBox>
                                    <asp:TextBox id="tbLName" runat="server"></asp:TextBox>
                                </td>
                            </tr>
                            <tr>
                                <td valign="top">
                                    Address: 
                                </td>
                                <td valign="top">
                                    <asp:TextBox id="tbAddress" runat="server"></asp:TextBox>
                                </td>
                            </tr>
                            <tr>
                                <td valign="top">
                                    City, State, ZIP: 
                                </td>
                                <td valign="top">
                                    <asp:TextBox id="tbCity" runat="server"></asp:TextBox>
                                    , 
                                    <asp:TextBox id="tbState" runat="server" size="2"></asp:TextBox>
                                     
                                    <asp:TextBox id="tbZIP" runat="server" size="5"></asp:TextBox>
                                </td>
                            </tr>
                            <tr>
                                <td valign="top">
                                    Phone: 
                                </td>
                                <td valign="top">
                                    <asp:TextBox id="tbPhone" runat="server" size="11"></asp:TextBox>
                                    
    
    </p>
                                </td>
                            </tr>
                            <tr>
                                <td valign="top" align="right" colspan="2">
                                    <asp:Button id="btSubmit" onclick="Submit" runat="server" text="Add"></asp:Button>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </asp:Panel>
            </p>
        </form>
    </body>
    </html>

  2. #2
    in poche parole per utilizzare MySql basta fare questi accorgimenti:
    <%@ import Namespace="CoreLab.MySql" %>

    dim objCmd as new mysqlCommand


    poi per il resto è uguale? o sbaglio?

  3. #3
    cambiano le classi....quindi devi cambiare leggermente la sintassi....es
    oledbdataadapter diventa mysqldataadapter....cmq nella guida del driver del provider c'è spiegato tutto...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.