Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Skapa komandon dynamiskt utan CommandBuilder

Postades av 2003-10-15 18:03:15 - Stefan Skoog, i forum vb.net, Tråden har 10 Kommentarer och lästs av 782 personer

Hej,
Jag bygger ett system som ska kunna arbeta mot flera olika databaser (Oracle och sql-erver till att börja med).

För att klara av detta använder jag mig av interfacen
IDbDataAdapter
IDbConnection
IDbCommand

Därefter använder jag mig av en Activator för att instansiera rätt sorts objekt (beroende på vilken databas jag använder)

T.ex.
myConnection = Activator.CreateInstance("C:\Program\Microsoft.NET\OracleClient.Net\System.Data.OracleClient.dll", IDbConnection)

Jag har en hel del tabeller i systemet och vill inte skriva Stored procedures för all kommunikation med databasen och vill på ngt sätt automatiskt generera update/insert/delete satser utifrån en select sats

Till en början använde jag mig av CommandBuilder för att generera update/delete/insert kommandon. Efter att ha gått över och använda interfacen ovan så hittar jag ingen bra metod att skapa mina insert/update/delete kommandon dynamiskt.

Någon som har ett förslag om hur man kan göra detta utan att använda CommandBuilder objektet. Alternativt om det finns ngt bra sätt att använda CommandBuilder objektet tillsammans med interfacen ovan.

Kod innan interfacen kom i spel:

Dim SelectComand As OracleCommand = oConn.CreateCommand()
Dim DataAdapter As OracleDataAdapter
Dim CommandBuilder As New System.Data.OracleClient.OracleCommandBuilder

SelectComand.CommandText = "SELECT * FROM " & strTabellnamn
DataAdapter = New OracleDataAdapter(SelectComand)
CommandBuilder = New OracleCommandBuilder(DataAdapter)
DataAdapter.Update(dsDataSet)


Svara

Sv: Skapa komandon dynamiskt utan CommandBuilder

Postades av 2003-10-15 21:10:10 - Fredrik Normén

Finns inget interface för CommandBuilder.

Ett förslag är att du skapar en abstrakt klass som innehåller alla vanliga anrop mot databas och skapar subklasser för varje provider som ärver basklassen. I dessa subklasser lägger du till deras egna CommandBuilders. Du kan tex i basklassen ha en metod som heter BuildCommand som måste överlagras av alla subklasser och i överlagringen anropar du deras respektive CommandBuilder.

Ett förslag är att du tar en titt på Microsoft Data Access Block version 3.0.

/Fredrik Normén NSQAURED2
http://www.nsquared2.net


Svara

Sv: Skapa komandon dynamiskt utan CommandBuilder

Postades av 2003-10-16 08:58:35 - Stefan Skoog

Hittar ingen information om Microsoft Data Access Block version 3.0. Vad e det?

Vet du hur CommandBuilder gör för att bygga select-satserna. Vad e det för klasser och metoder den använder för att få ut informationen om tabeller från databasen. För om jag har fattat det rätt så frågar CommandBuilder objectet databasen om shemat för den tabell som select-satsen berör och skapar utifrån de informationen Update/insert/delete -satser med tillhörande parametrar.

Är det någon som har gjort någon test eller läst någon test om hur mycket prestanda man förlorar genom att använda sig av commandbuilder i stället för att skriva alla satserna själv.

Låter vettigt att göra som du föreslår med BuildCommand osv. Idag har jag en abstrakt klass som hanterar alla sorters db-kopplingar. Om jag sen vill ha en dataklass som arbetar mot en specifik tabell eller uppsätttning tabeller får den ärva från den abstrakta klassen och sedan specificera sina select-satser.


Svara

Sv: Skapa komandon dynamiskt utan CommandBuilder

Postades av 2003-10-16 09:40:39 - Fredrik Normén

Här har du lite information om DAAB

[Microsoft Data Access Application Block för .NET]

Här har du länken till DAAB 3.0.

http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=c20d12b0-af52-402b-9b7c-aaeb21d1f431

CommandBuilder bygger inte select-satster ;) Den utgår som du säkert vet från ett SelectCommand objekt och gör extra databas anrop för att få ut metdata för att kunna skapa InsertCommand, DeleteCommand och UpdateCommand objekten. Select frågan i SelectCommand måste returnera en primåär nycket eller unik column för att fungera.

Jag skulle inte rekommendera dig att använda CommandBuilder om prestandan spelar stor roll för dig. Det är bättre att själv sätta upp InsertCommand etc.
Självklart är det betydligt enklare att använda CommandBuildern och det tar mindre tid att utveckla. Om du anser att du har råd med den extra resursen som krävs av CommandBuilder för att kunna utveckla fortare och gör det enkelhet för dig, så tycker jag att du kan använda dig av CommandBuilder.

Snart kommer det artiklar från Microsoft om hur och vad man bör tänka på för att öka prestandan på sina tillämpningar. Där rekommenderar tex Microsoft att inte använda CommandBuilder i runtime. Jag skulle rekommendera dig att läsa dom artiklaran när dom dyker upp, för det kan ge dig en hel del kunskap om hur både .Net fungerar och vad utvecklare bör tänka på för att få ökad prestanda på sina tillämpningar.

/Fredrik Normén NSQUARED2
http://www.nsquared2.net


Svara

Sv: Skapa komandon dynamiskt utan CommandBuilder

Postades av 2003-10-16 10:10:14 - Stefan Skoog

Ok,

En annan sak som jag undrar är om man inte kan få ut tillräckligt med information från typade dataset för att skapa insert/update och delete commandon.

vilka av följande parametrar behöver man igentligen använda?
Parameter.ParameterName
Parameter.DbType
Parameter.Size
Parameter.Direction
Parameter.IsNullable
Parameter.Precision
Parameter.Scale
Parameter.SourceColumn
Parameter.SourceVersion
Parameter.Value


Svara

Sv: Skapa komandon dynamiskt utan CommandBuilder

Postades av 2003-10-16 10:27:50 - Fredrik Normén

Det borde du kunna, men tycker du att det är värt det besväret och priset!?

/Fredrik Normén NSQUARED2
http://www.nsquared2.net


Svara

Sv: Skapa komandon dynamiskt utan CommandBuilder

Postades av 2003-10-16 10:57:22 - Stefan Skoog

Förstår inte riktigt vad du menar.

Att skriva funktionen är ett engångsjobb och man slipper fråga databasen efter metainformation för att skapa command objekten vilket borde leda till förbättrad prestanda eller? Var bara en tanke men den kanske inte fungerar i Praktiken ;-)


Svara

Sv: Skapa komandon dynamiskt utan CommandBuilder

Postades av 2003-10-16 11:14:32 - Stefan Skoog

Om jag gör som du nämnde ovan och Skapar basklass med de vanliga funktionerna och subklasser för varje provider och låter de implementera en CreateCommand metod som finns definierad i basklassen. Vad ska då CreateCommand metoden returnera? en array med IDbCommand eller kanske en egendefinierad klass som innehåller 3 IDbCommand variabler samt get och set metoder för dessa eller?


Svara

Sv: Skapa komandon dynamiskt utan CommandBuilder

Postades av 2003-10-16 11:17:01 - Fredrik Normén

Du skulle säkert kunna vinna lite prestanda, men frågan är om den extra prestandan du vinner är värt det besväret att själv skapa en metod som genererar fram insert, delete och update (Du får det nämligen gratis av CommandBuilder)!?

Det du ev kommer att spara prestanda på är den extra tid då en connection måste vara öppen för att CommandBuilder ska kunna skapa upp InsetCommand och resterande objekt.

Om du utgår från ett typat dataset så kommer du ev alltid behöva använda dig av det typade dataset i din metod, du kommer kanske få problem med helt vanliga dataset.

Det tar iofs inte så lång tid att skapa en genererare utifrån ett Dataset, så jag är sammtidigt nyfiken på prestandavinsten att själv generera fram kommandona än att låta CommandBuildern göra det. Om du nu bestämmer dig för att göra en egen genererare så skulle jag var mycket tacksam om du kunde göra ett prestanda test och posta in resultatet här i detta forum.

/Fredrik Normén NSQUARED2
http://www.nsquared2.net


Svara

Sv: Skapa komandon dynamiskt utan CommandBuilder

Postades av 2003-10-16 11:47:59 - Fredrik Normén

Hmm, du skulle kunna göra så att din UpdateDataset metod tar ditt dataset och UpdateDatset metoden i sig använder sig av din CommandBuilder metod där du skickar in två argument med ditt dataset och din dataadapter. CommandBuilder metoden skulle då kunna lägga till InsertCommand och de andra till dataadaptern. På så sätt behöver inte din CommandBuilder returnera något plus att du förbereder dataadaptern för användning.

/Fredrik Normén NSQUARED2
http://www.nsquared2.net


Svara

Sv: Skapa komandon dynamiskt utan CommandBuilder

Postades av 2003-10-17 08:39:07 - Stefan Skoog

Ska testa lite nu så återkommer jag så fort jag tagit fram en bra lösning

Tack för förslagen och informationen Fredrik


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 159
27 952
271 704
1 514
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies