Avatar billede halden Nybegynder
23. marts 2005 - 13:33 Der er 14 kommentarer og
1 løsning

Dynamisk insert og update commands

Er følgende muligt, og i så fald hvordan?

Skal have lavet en update og insert sqlcommand dynamisk udfra en vilkårlig opbygget DataTable.

Problemmet er hvordan jeg får lavet sql koden til at kunne håndtere en vilkårlig tabel med et vilkårligt antal kolonner af forskellige typer.
Avatar billede arne_v Ekspert
23. marts 2005 - 13:36 #1
Du looper vel igennem tabel definitionen (felt navne og typer) og opbygger en SQL streng !?
Avatar billede halden Nybegynder
23. marts 2005 - 13:47 #2
Her er lidt af det kode jeg har lavet atm.
Problemet er når jeg skal add parametre til insert command så skal man have parameter navn, type, størrelsen og source column.
Hvordan får jeg dem???


_sqlInsertCommand = new SqlCommand();

StringBuilder _tableColums = new StringBuilder();
StringBuilder _tableValues = new StringBuilder();

foreach (DataColumn col in (_dtMsSqlTableData.Columns))
{
    _tableColums.Append(col.ColumnName+",");
    _tableValues.Append("@"+col.ColumnName+",");
    foreach (DataRow row in col)
    {
        _sqlInsertCommand.Parameters.Add(("@"+col.ColumnName, ((SqlDbType)col.ColumnName.GetType()), , col.ColumnName);
    }
}
_tableColums.Remove(_tableColums.Length-1, 1);
_tableValues.Remove(_tableValues.Length-1, 1);

_sqlInsertCommand.CommandText = @"INSERT INTO "+_dtMsSqlTableData.TableName+"("+_tableColums+") VALUES ("+_tableValues+")";
Avatar billede arne_v Ekspert
23. marts 2005 - 13:50 #3
DataColumn objekter har en DataType property som kan give dig typen.
Avatar billede arne_v Ekspert
23. marts 2005 - 13:51 #4
Du skal naturligvis selv lave en mapning til database typer.

(fordi de er database specifikke)
Avatar billede arne_v Ekspert
23. marts 2005 - 13:52 #5
Og jeg forstår ikke den inderste foreach løkke ...
Avatar billede halden Nybegynder
23. marts 2005 - 13:56 #6
kan du give et eksempel på den mapning i forhold til det kode jeg har skrevet???

ja ved godt at den sidste løkke ikke skal være der...
Avatar billede halden Nybegynder
23. marts 2005 - 13:58 #7
jeg kan nemlig ikke helt se hvor du vil få den mapning fra....
Avatar billede arne_v Ekspert
23. marts 2005 - 14:09 #8
.Parameters.Add(col.ColumnName, DotnetToDatabaseType(col.DataType))

hvor

SqlDbType DotnetToDatabaseType(Type t)
{
  if(t == Type.GetType("System.Int32")) {
      return SqlDbType.Int;
  } else
...
}
Avatar billede arne_v Ekspert
10. april 2005 - 17:27 #9
OK ?
Avatar billede halden Nybegynder
10. april 2005 - 20:45 #10
hvad så hvis der er en datatype der er lavet i databasen - hvad gør man så?
Avatar billede arne_v Ekspert
10. april 2005 - 21:22 #11
Kan man definere sine egne typer i SQLServer ?
Avatar billede arne_v Ekspert
26. april 2005 - 00:38 #12
??
Avatar billede halden Nybegynder
26. april 2005 - 12:06 #13
undskyld det meget sene svar men har været væk en måned.
ja man kan godt definere sine egne typer i en sql2000.

men jeg har fundet en anden god måde at gøre det på:
SQLCommandBuilder kan lave alle ens inserts, updates og deletes automatisk.
Så det eneste der skal i min gemTable metode er:

SqlCommandBuilder _sqlCmdBuilder = new SqlCommandBuilder(_sqlDataAdapter);
_sqlDataAdapter.Update(_dtMsSqlTableData);

skønt det kan gøres så enkelt.
Avatar billede arne_v Ekspert
04. maj 2005 - 20:15 #14
Den er meget kendt.

Men du sagde "vilkårlig opbygget DataTable".

Det har nok vildledt os lidt.

"DataTable i DataSet filled fra DataAdapter" havde måske fået en klokke til at ringe.
Avatar billede halden Nybegynder
06. maj 2005 - 06:51 #15
Undskyld hvis jeg ikke fik det forklaret ordentligt.
Men smid et svar så får du point...
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