Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

asp.net v2 & ms-access 2000 με κλασσικό πρόβλημα κλειδωμάτων και άσχετο provider

Îåêßíçóå áðü ôï ìÝëïò agmarios. Τελευταία δημοσίευση από το μέλος agmarios στις 01-06-2006, 09:45. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  31-05-2006, 11:52 13501

    asp.net v2 & ms-access 2000 με κλασσικό πρόβλημα κλειδωμάτων και άσχετο provider

    Όπως λέει και ο τίτλος έχω ένα φτιάξει ένα web site με asp.net v2 και το έχω συνδέσει με μια access (κακώς το ξέρω αλλά ότι πληρώνεις παίρνεις, άλλωστε ο όγκος των δεδομένων δεν δικαιολογεί κάτι παραπάνω).

    Ο υπέροχος provider για λόγους ασφαλείας που μόνο αυτός ξέρει δήλωσε ότι δεν υποστηρίζει τον συνδυασμό .net & access αν θες  .net πάρε sql server, αν θες access γράψε απλό aspDevil

    Επειδή όμως υποστηρίζει FP ext. έβαλα κι εγώ την βάση μου στο /fpdb και όλα σχεδόν μέλι-γάλα αφού αρκετές φορές κλειδώνεται η βάση και ο πελάτης γκρινιάζει.

    Έχω ξεσκιστεί να ελαφραίνω τη βάση, πέταξα έξω τα datasets και έβαλα datareaders (ακόμη και τα gridViews φορτώνουν με datareaders), κάνω caching, ξαναγράφω τα queries κλπ

    Φταίει ο provider ή πρέπει απλά να ζήσω με τα προβλήματα της access? 

  •  31-05-2006, 12:54 13502 σε απάντηση της 13501

    Απ: asp.net v2 & ms-access 2000 με κλασσικό πρόβλημα κλειδωμάτων και άσχετο provider

    Ποιόν provider χρησιμοποιείς;

    Το ότι άλλαξες τα DataSets με DataReaders ... δε νομίζω οτι θα σε βοηθήσει. Αντιθέτως μάλιστα, ίσως σε "ρίξει" κιόλας, γιατί τα DataSets είναι disconnected. Απαξ και διαβάστηκε, τέρμα η εμπλοκή της βάσης απο 'κεί και πέρα. To UI σου κάνει render και η βάση είναι ήδη ελεύθερη να κάνει κάτι άλλο. Αντίθετα, ο DataReader μένει ανοιχτός και μιλάει στη βάση κατα τη διάρκεια του UI rendering. Μεταθέτει τον φόρτο απο την εφαρμογή ( τα DataSets σου τρώνε μνήμη ), στη βάση, πράγμα μάλλον κακό αν έχεις μια Access απο πίσω ...
    Angel
    O:]
  •  31-05-2006, 13:28 13503 σε απάντηση της 13501

    Απ: asp.net v2 & ms-access 2000 με κλασσικό πρόβλημα κλειδωμάτων και άσχετο provider

    δεν έχει κι άδικο μπορεί συνολικά o datareader να είναι πιο γρήγορος αλλα μάλλον ζορίζει τη βασούλα μου. Πάντως με τους datareaders έχω λιγότερα κλειδώματα (ίσως από άλλους παράγοντες)

    Πάντως και στις 2 περιπτώσεις το πρόβλημα παραμένει δυστυχώς το ίδιο, η βάση κλειδώνει.

    Ευχαριστώ πάντως για τη βοήθεια
  •  31-05-2006, 14:52 13505 σε απάντηση της 13501

    Απ: asp.net v2 & ms-access 2000 με κλασσικό πρόβλημα κλειδωμάτων και άσχετο provider

    Aν θέλεις μπορείς να χρησιμοποιήσεις την υπηρεσία δωρεάν φιλοξενίας για developers που παρέχουμε στην Xelixis.Net
    Angelos Xipolias

    Xelixis.Net
    In .Net we Trust
  •  31-05-2006, 14:57 13506 σε απάντηση της 13503

    Απ: asp.net v2 & ms-access 2000 με κλασσικό πρόβλημα κλειδωμάτων και άσχετο provider

    Δεν έγραψες όμως τελικά ποιόν provider χρησιμοποιείς και πώς.

    Αν θες μια συμβουλή, οποτεδήποτε "στα παλιά τα χρόνια" κληθήκαμε να γράψουμε οτιδήποτε  πάνω απο Access, φροντίζαμε όλα τα queries να εκτελούνται σε λιγότερα απο 3-4 connections, υλοποιώντας Singletons για το data access. Νομίζω οτι κάπου εκεί είναι και το πραγματικό όριο της δύστυχης Access :D

    Αν θές, δείξε και λίγο κώδικα, καλά τα περιγραφικά, αλλά μόνο το source τα λέει όλα :) 

    Angel
    O:]
  •  31-05-2006, 19:32 13520 σε απάντηση της 13506

    Απ: asp.net v2 & ms-access 2000 με κλασσικό πρόβλημα κλειδωμάτων και άσχετο provider

    προφανώς δεν μπορώ (λόγω χώρου) να δείξω όλες τις σελίδες αλλά 2 αντιπροσοπευτικά παραδείγματα

    1) content management: view all events


    <P dir=ltr style="MARGIN-RIGHT: 0px">      <asp:accessdatasource
            id="AccessDataSource1"
            runat="server"
            datasourcemode="DataReader"
            datafile="~/fpdb/spincrete.mdb"
            selectcommand="SELECT id,startdate,enddate,titleGR FROM events"  
            DeleteCommand="DELETE FROM events WHERE id=?" >
          </asp:accessdatasource>

          <asp:gridview  id="GridView1"   runat="server"  autogeneratecolumns="False"  datakeynames="id" autogenerateeditbutton="False"  AutoGenerateDeleteButton="True" datasourceid="AccessDataSource1">
            <columns>
                <asp:hyperlinkfield text="Edit"  datanavigateurlfields="id" datanavigateurlformatstring="~/admin/editEvents.aspx?id={0}"/>
                <asp:hyperlinkfield text="Links" datanavigateurlfields="id" datanavigateurlformatstring="~/admin/editEventLinks.aspx?id={0}"/>
                <asp:boundfield headertext="Τίτλος Ελληνικά" datafield="titleGR" />
                <asp:boundfield headertext="Αρχική Ημερομηνία" datafield="startdate" />
                <asp:boundfield headertext="Τελική Ημερομηνία" datafield="enddate" />
            </columns>
          </asp:gridview>

    2. content management: edit event



    <%@ Import Namespace="system.data" %>
    <%@ Import Namespace="system.data.oledb" %>
    <%@ Register TagPrefix="ExportTechnologies" Namespace="ExportTechnologies.WebControls.RTE" Assembly="ExportTechnologies.WebControls.RTE" %>
    <%@ Page Language="VB" ContentType="text/html" ResponseEncoding="windows-1253" AutoEventWireup="true" validateRequest="false" %>
    <!--#include file="../bin/dbConn.aspx"-->
    <!--#include file="../bin/clearForm.aspx"-->
    <script language="vb" runat="server">
    dim textRow as datarow
    Sub initialize(sender as Object, e as EventArgs)
      nid.text=iif(isdbnull(textRow("id") ),"",textRow("id"))
      startdate.text = iif(isdbnull(textRow("startdate") ),"",textRow("startdate"))
      enddate.text = iif(isdbnull(textRow("enddate")),"",textRow("enddate"))
      locationGR.text = iif(isdbnull(textRow("locationGR")),"",textRow("locationGR"))
      descriptionGR.text = iif(isdbnull(textRow("descriptionGR")),"",textRow("descriptionGR"))
      titleGR.text = iif(isdbnull(textRow("titleGR")),"",textRow("titleGR"))
      abstractGR.text = iif(isdbnull(textRow("abstractGR")),"",textRow("abstractGR"))
    end sub

    Sub Page_Load(sender as Object, e as EventArgs)
     if not page.ispostback then
      textRow = readDataRowWithQueryAndParameter("eventsIdAll", request.querystring("id"), "nId")
      initialize(sender,e)
     end if
    end sub

    Sub On_Click(ByVal source As Object, ByVal e As EventArgs)
        Try
            access1.Update()
        Catch except As Exception
           
        End Try
     End Sub
    </script>

    <form runat="server">
    <table>

     <tr>
          <strong colspan="2">Αρχική Ημερομηνία:</strong> </td>
        </tr>
     <tr>
      </td colspan="2" id="startdate" Columns="50" runat="server">
     </tr>
     <tr>
          <strong colspan="2">Τελική Ημερομηνία:</strong> </td>
        </tr>
     <tr>
      </td colspan="2" id="enddate" Columns="50" runat="server">
     </tr>
     <tr>
      <strong colspan="2">Τοποθεσία στα Ελληνικά:</td>
     </tr>
     <tr>
          </td colspan="2" id="locationGR" Columns="50" runat="server">
        </tr>
     <tr>
      <strong colspan="2">Τίτλος στα Ελληνικά:</td>
     </tr>
     <tr>
          </td colspan="2" id="titleGR" Columns="50" runat="server">
        </tr>
    <tr>
      <strong>Περίληψη  στα Ελληνικά: </td>
    </tr>
    <td>
    <ExportTechnologies:RichTextEditor width="400" height="200" id="abstractGR" runat="server"  RTEResourcesUrl="/RTE_Resources/"  HideEditWebPage="true" HideAbout="true"  HideBackgroundColor="true" HideInsertDate="true"/>
    </tr>
    <tr>
      <strong>Περιγραφή  στα Ελληνικά:</strong> </td>
    </tr>
    <td>
     <ExportTechnologies:RichTextEditor width="400" height="200" id="descriptionGR" runat="server"  RTEResourcesUrl="/RTE_Resources/"  HideEditWebPage="true" HideAbout="true"  HideBackgroundColor="true" HideInsertDate="true"/>
     </tr>

    <tr>
      </td id="nid" Visible="false" runat="server">
     </tr>
     <td> <asp:Button ID="insertButton" runat="server"  OnClick="On_Click" Text="Ενημέρωση"/>
        </td ID="resetButton" runat="server" OnClick="initialize" Text="Καθαρισμός">
     </tr>
     </table>
      <asp:accessdatasource id="access1"
           runat="server"
           datasourcemode="DataReader"
              datafile="~/fpdb/spincrete.mdb"
        updatecommand="Update events SET startdate=?,enddate=?,locationGR=?,descriptionGR=?,
            titleGR=?,abstractGR=? WHERE id=?"
    >
        <updateparameters>
        <asp:ControlParameter Name="startdate" ControlId="startdate" type="DateTime" />
        <asp:ControlParameter Name="enddate" ControlId="enddate" type="DateTime" />
        <asp:ControlParameter Name="locationGR" ControlId="locationGR" type="string" size="50"/>
        <asp:ControlParameter Name="descriptionGR"  ControlId="descriptionGR" PropertyName="text" type="string" size="65000"/>
        <asp:ControlParameter Name="titleGR" ControlId="titleGR" type="string" size="50"/>
        <asp:ControlParameter Name="abstractGR"  ControlId="abstractGR" PropertyName="text" type="string" size="65000"/>
        <asp:ControlParameter Name="newid" ControlId="nid" />
        
        </updateparameters>
       </asp:accessdatasource>
      </form>

    3) Εμφάνιση στον χρήστη:


    <P dir=ltr style="MARGIN-RIGHT: 0px"><%@ Import Namespace="system.data" %>
    <%@ Import Namespace="system.data.oledb" %>
    <%@ MasterType virtualpath="spin.master" %>
    <%@ Page Language="VB"  ContentType="text/html" MasterPageFile="spin.master" Title="spincrete" ResponseEncoding="windows-1253" AutoEventWireup="True" %>
    <%@ Register TagPrefix="top" TagName="topbar" Src="top.ascx" %>
    <!--#include file="bin/dbConn.aspx"-->
    <script runat="server">
    Sub Page_Load(sender as Object, e as EventArgs)
     if not page.ispostback then
     dim seldate as date = CDate(request.queryString("seldate")) 
     Dim ooledbConn As oledbConnection = New oledbConnection(sConnStr())
     dim selectCMD As New oledbCommand("event_qu", ooledbConn)
     dim myPar as new oledbParameter("@seldate" ,oledbType.date)
     myPar.value = seldate
     selectCMD.CommandType = CommandType.StoredProcedure
     selectCMD.Parameters.Add(myPar)
     ooledbConn.Open()
     Dim myDAtaReader As OleDbDataReader = selectCMD.ExecuteReader()
     eventrep.datasource = myDAtaReader
     eventrep.databind
     myDAtaReader.close
    ooledbConn.close()
     end if
    end sub

    </script>

    <asp:Repeater id="eventrep" runat="server" >
    <headertemplate>
    <table border="0">
    </headertemplate>
    <itemtemplate>
    <strong colspan="2"><%# DataBinder.Eval(Container.DataItem, "titleGR")%></tr>
    <td>&nbsp;</tr>
    <strong colspan="2">Ημερομηνία: </tr>
    <td width="40">&nbsp;<strong>Από:</strong> <%# DataBinder.Eval(Container.DataItem, "startdate")%></tr>
    <td width="40">&nbsp;<strong>Εώς:</strong> <%# DataBinder.Eval(Container.DataItem, "enddate")%></tr>
    <strong colspan="2">Τοποθεσία:</tr>
    <td >&nbsp;<td ><%# DataBinder.Eval(Container.DataItem, "locationGR")  %></tr>
    <strong colspan="2">Περιγραφή:</tr>
    <td >&nbsp;<td><%# DataBinder.Eval(Container.DataItem, "descriptionGR")  %></tr>
    <asp:label colspan="2" Visible="false" runat="server" id="eventId" Text='<%# DataBinder.Eval(Container.DataItem, "id")  %>'/>
    <asp:accessdatasource
            id="AccessDataSource1"
            runat="server"
            datasourcemode="DataReader"
            datafile="~/fpdb/spincrete.mdb"
            selectcommand= "SELECT linkTitleGR,urlGR FROM link_events WHERE <A href="mailto:eventId=@eId">eventId=@eId</A>"
           >
      <selectparameters>
          <asp:controlparameter name="eId" type="int32" controlId="eventId" />
           </selectparameters> 
         </asp:accessdatasource>
          <asp:Repeater id="linkRepeater" runat="server" datasourceid="AccessDataSource1">
       <strong border="0" colspan="2">Σύνδεσμοι:</headertemplate>
       <itemtemplate>
      
       <td width="35">&nbsp;<a  style="color:#008CE6; font-size:16px; text-decoration:none; font-family: Times New Roman, Times, serif; font-weight:bold;" href="<%# DataBinder.Eval(Container.DataItem, ">urlGR")  %>"><%# DataBinder.Eval(Container.DataItem, "linkTitleGR")  %></tr>
       </itemtemplate>
       </footertemplate>
       </asp:repeater>
    </tr>
    </tr colspan="2" class="separator">
    <td>&nbsp;</tr>
    </itemtemplate>
    </footertemplate>
    </asp:Repeater>
    <P dir=ltr style="MARGIN-RIGHT: 0px">

  •  31-05-2006, 20:29 13524 σε απάντηση της 13520

    Απ: asp.net v2 & ms-access 2000 με κλασσικό πρόβλημα κλειδωμάτων και άσχετο provider

    Νομίζω οτι τα:

    Dim ooledbConn As oledbConnection = New oledbConnection(sConnStr())

    σου ανοίγουν πολλά connections ταυτόχρονα και σου lock-άρουν την Access. Αν μπορείς, δοκίμασε να γράψεις κάπου μια function η οποία να σου επιστρέφει ένα μοναδικό connection, ή ένα απο ένα "pool" 2-3 connections. Επίσης, καλό θα ήταν να γράψεις άλλη μία η οποία θα εκτελεί τα SqlCommands soy, φροντίζοντας να κάνει κάποιο locking στη χρήση του μοναδικού ή pooled connection ( γιατί μπορείς να εκτελείς μόνο ένα query τη φορά σε ένα connection, οπότε χρειάζεσαι locking αν ακολουθήσεις αυτό το δρόμο )

    Τώρα, όσον αφορά τα drag'n'drop access data sources ... δεν έχεις λύση απ'όσο ξέρω. Αν όμως όλα τα άλλα calls περνάνε απο pooled ή μοναδικό connection, ίσως τη γλυτώσεις και μειώσεις δραστικά τα locks στο mdb file ...


    Angel
    O:]
  •  01-06-2006, 09:45 13536 σε απάντηση της 13524

    Απ: asp.net v2 & ms-access 2000 με κλασσικό πρόβλημα κλειδωμάτων και άσχετο provider

    πράγματι ανοίγω νέα connection αλλά φροντίζω με ευλάβια να τα κλείνω αμέσως μόλις κάνουν τη δουλειά τους. Άλλωστε όπως είπες κι εσύ το καθένα εκτελεί μόνο ένα query και αν είναι να κάνω μόνος μου τη διαχείριση των commands πάνω σε ένα μοναδικό connection χάθηκα.

    Το site είναι σε δοκιμαστική φάση οπότε ο φόρτος δεν δικαιολογεί να μην φτάνουν τα connections. Άρα το πρόβλημα είναι οι εγγραφές στη βάση.

    Όσο για το accessdatasource απλά πιστεύω ότι η mama-microsoft έκανε καλά τη δουλειά της και κλείνει το connection

    Μάριος

    υ.γ. Ευχαριστώ όλους όσους αφιέρωσαν το χρόνο τους για το θέμα. Μπορεί να μην έχω λύση αλλά με έχετε βοηθήσει να εμβαθύνω αρκετά. 

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems