Avatar billede scorp-d Nybegynder
18. oktober 2010 - 14:06 Der er 10 kommentarer

Oprette tabel(Schema) i MSSQL database, ud fra DataTable

Hej.

Ville lige høre om der er nogen der kender den mest effektive metode at oprette en tabel(med tilhørende constraints, keys etc.)  ud fra en C# generede DataTable ?

DataTable'en er selvfølgelig dynamisk, både schema og indhold.

På forhånd tak
Scorp-D
Avatar billede bkp Nybegynder
19. oktober 2010 - 16:33 #1
Uha, det er en tung en du er igang med for der findes ingen nemme løsninger, du skal selv analysere opbygningen og manuelt bygge tabellen op, men det er ellers en interessant tanke, og hvis jeg havde godt tid, kunne det faktisk være meget sjovt at lave.

Jeg lavede faktisk noget lignende i de gamle VB6 dage, men det er mange år siden.
Det var opbygget således at database strukturen lå i en TSql tekstfil som blev eksekveret mod serveren, og herefter havde man en model hvordan databasen skulle se ud. Herefter gennemgik programmet alle objekter i den tomme database op imod den kørende database, og foretog de ændringer der skulle til.

Men i dag bruger man jo stærke værktøjer som RedGates toolbox. Men det var nu sjovt at lave og det fungerede fint.

Hvis du stadig har lyst så husk det er hårdt benarbejde.

Se eventuelt her:
http://stackoverflow.com/questions/1348712/creating-a-sql-server-table-from-a-c-datatable

M.v.h.
http://bkristensen.tumblr.com/
Avatar billede scorp-d Nybegynder
19. oktober 2010 - 16:49 #2
Okay... var det jeg var bange for...

Undre mig bare over hvorfor det skal være så svært at oprette en kopi af en tabel...


Havde selv overvejet at køre hver enkel kolonne i source-DB's tabel igennem og tilføje de nødvendige SQL statements.
Og så til sidst afvikle hele SQL-statementet op imod dest-DB'en.
Avatar billede bkp Nybegynder
19. oktober 2010 - 16:52 #3
Ja det er jo ikke uden grund at RedGate kan tjene kassen på deres tools ;-)

M.v.h.
http://bkristensen.tumblr.com/
Avatar billede janus_007 Nybegynder
19. oktober 2010 - 19:22 #4
scorp-d, jeg kan da lige tilføje...
glem datasets, de minder mig om noget .NET 1.1 :) og brug linq istedet. Her kan du oprette tabellerne udfra dine objekter. Om det så er smart eller ej er en anden snak.
Avatar billede bkp Nybegynder
19. oktober 2010 - 19:57 #5
Det er lidt pærer og æbler, da jeg har forstået at han vil danne tabel ud fra en datatable, Linq er jo mere til at linke til en database du allerede har designet.
Men ellers er det rigtigt, ORM er da en nem måde at bygge et datalag på: http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

Men jeg ville nu nok anbefale at kigge nærmere på Entity Framework som er afløseren for Linq to Sql:
http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework

http://ayende.com/Blog/archive/2008/10/31/microsoft-kills-linq-to-sql.aspx

M.v.h.
http://bkristensen.tumblr.com/
Avatar billede scorp-d Nybegynder
19. oktober 2010 - 20:25 #6
janus_007#

Benytter heller ikke datasets.... Opretter en datatable ud fra en simpel SQL-command.....

Og som bkp også skriver så virker det lidt bøvlet at benytte LINQ, nu når source ændre sig hver gang....
Avatar billede janus_007 Nybegynder
19. oktober 2010 - 21:59 #7
bkp-> Nu nævnte jeg ikke lige L2S eller LTE, men bare Linq som koncept :) skønner at scorp-d kan google videre og blive klogere - beklager jeg ikke var mere præcis.
Så nævner du ORM som datalag... hmmm... det er vidst snart et vidt begreb efterhånden, ORM ændrer vores traditionelle 3lags model en del, anyway.. det kan vi altid diskutere -> Start en ny tråd :)

scorp-d- >
Ja det er rigtigt.. ser lige nu at det er dynamisk vi snakker. Har du tænkt på at oprette det som Xml istedet? Evt. som en xml-type i MSSQL? Men svært lige at råde.. kan du forklare lidt mere om hvorfor og hvordan din source ændrer sig?
Avatar billede scorp-d Nybegynder
20. oktober 2010 - 08:53 #8
Jeg har ingen viden/kontrol over source eller dest DB...

Det er brugeren som giver conn-string til både source og dest DB, og der er ingen krav til deres opbygninger.

Ligeledes er source og dest DB aldrig opbygget ens....
Avatar billede janus_007 Nybegynder
20. oktober 2010 - 20:25 #9
Det skriger på xml :)

Serialiser dit dataset og gem i en tabel med flg. felter evt.:
UserId, XmlData, Created, Modified
Avatar billede scorp-d Nybegynder
21. oktober 2010 - 10:22 #10
Jamen jeg har jo ingen tabel som jeg kan gemme det i...

Source:
En database som indeholder en vilkårlig tabel, som jeg kun har læserettigheder til.

Dest:
En database som MÅSKE indeholder en tabel ved det angivet navn, som MÅSKE allerede indeholder kolonner og værdier(kan være nogle kolonner skal fjernes/tilføjes/rettes etc.).
Der må kun pilles ved denne ene tabel, dvs. ingen støttetabeller.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester